3

私の場合、適切なクエリ サーバーを使用すると、通常は処理されて返送される XML 応答が常に返されます。しかし同時に、サーバーの構成は、不適切なクエリがあった場合に XML ではなく HTML 応答を返すようになっています。機能する唯一のものは、単にユーザーに送り返されるだけです。何らかの方法で解析プロセスを回避し、エラーを個人的な形式で送信することは可能ですか?

詳細:

だから私は応答コードを取得します

<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="$axis2:HTTP_SC" scope="default" type="STRING"/>

プロセッサを選択し、取得したすべてをユーザーに送信するだけです

<switch xmlns:ns="http://org.apache.synapse/xsd" source="$axis2:HTTP_SC">
  <case regex="401">
     <send/>
  </case>

この場合、すべてが機能しました。ここでは、ユーザーが HTML サーバーの応答をそのまま受け取るだけです。

しかし!このように応答の本文を置き換えようとすると

<case regex="401">
     <payloadFactory media-type="xml">
        <format>
           <error xmlns="">   
              <message>some message</message>
           </error>
        </format>
     </payloadFactory>
     <send/>

エラーが発生する

[2013-09-11 15:20:06,669] ERROR - AnonymousListMediator Error while building messageorg.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxParsingException: Unexpected lose tag </head>; expected </link>. at [row,col {unknown-source}]: [13,6] at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)

回答を置き換えようとすると (障害メディエーターを介しても)、このエラーが発生します。何か案は?

4

2 に答える 2

2

その質問をしたことを許してください文字通りそれを解決することができました! 解決策の検索には多くの時間が費やされてきましたが、この問題の解決策をここに残します。問題は、

contentType="text/html"

システム設定で、このコンテンツ タイプのメッセージ ビルダが指定されていません。ファイル {WSO2 ESB HOME}/repository/conf/axis2/axis2.xml を見つけるためにすべてが機能するようにするには

Find it セクション ( Message Builders ) したがって、このセクションには、そのコンテンツ タイプのハンドラーはありません。(もし私が WSO の開発者だったら、そのデフォルト ハンドラーは何かと尋ねますが、残念ながら、この状況では適切ではありません) したがって、このセクションでは、コンテンツのタイプに対応するハンドラーを追加する必要があります。

<messageBuilder contentType="text/html"
                    class="org.wso2.carbon.relay.BinaryRelayBuilder"/>

そのため、メッセージはバイナリとして処理されます。ただし、同時にシステムがクラッシュすることはありません。この操作の後、上記の PayloadFactory を安全に使用できます。わたしにはできる!多分他の誰かが役に立つでしょう。ご清聴ありがとうございました。試してくれたチャナカ ウダヤに個人的に感謝します。

于 2013-09-12T09:41:28.660 に答える
-1

以下のように、メディエーターの後にメディエーターを追加することで、payloadFactory メディエーターがメッセージの本文を作成したかどうかを確認できます。

<case regex="401">
     <payloadFactory media-type="xml">
        <format>
           <error xmlns="">   
              <message>some message</message>
           </error>
        </format>
     </payloadFactory>
**<log level="full"/>**
     <send/>

このログ メディエーターを使用して、メッセージがビルドされているかどうかを確認できます。シナプス構成全体を共有していただければ、適切な解決策を提供できます。

于 2013-09-12T01:21:02.327 に答える