0

ここでまたアシッシュ。

着信SOAPリクエストを解析し、リクエストからの情報の一部をログに記録するルートを開発しました。SOAPサービスリクエストから情報を取得するためにヘッダーとXPATHを使用しました。ルートは適切な情報を正常に解析してログに記録します。

ルートは次のとおりです。

 <route streamCache="true">

        <from uri="<some URI>"/>  

        <setHeader headerName="SOAPAction">
            <constant>http://www.something.com/constant>
        </setHeader>

         <setHeader headerName="actionId">
            <xpath resultType="java.lang.String">//ws:actionId/text()</xpath>
          </setHeader>


    <choice>

            <when>
                <xpath>//ws:actionId = '1'</xpath>
                <to ref="callService" />                   
            </when>

            <otherwise>

                <log message="Wrong Action ID : ${in.headers.actionId}" 
                          loggingLevel="ERROR"/>                  

            </otherwise>   

        </choice>

    </route>

ロジックに従って、actionIdが1の場合、ルートはcallService URIにリダイレクトする必要があります。そうでない場合、応答なしで間違ったアクションIDをログに記録する必要があります。

actionIdが1の場合、ロジックは機能し、callServiceにリダイレクトされ、適切な応答を呼び出し元に送信します。actionIdが1以外の場合、アクションIDを含む間違ったアクションIDに関するログを書き込みますが、呼び出し元への応答と同じ要求を送信します。

soapUIとJavaSocketProgrammingを使用してチェックしましたが、出力は同じで、actionIdを正確にログに記録しますが、呼び出し元への応答と同じ要求を送信します。

応答と同じ要求はしたくない。応答は空白にする必要があります。

誰かが私が解決策を見つけるのを手伝ってくれますか?

よろしく、

Ashish

4

1 に答える 1

0

応答をに設定するか、その状況でも空が何を意味するかを設定する必要があります。また、応答は、応答が何であるかをWSDLコントラクトに適合させる必要があります。

したがって、それ以外の場合は、空の応答を設定するコードを追加します。たとえば、次のようなものです。

<otherwise>
    ...
    <transform>
      <constant>NO DATA</constant>
    </transform>
 </constant>

ただし、camel-cxfを使用する場合は、dataFormatオプションが空の応答の作成方法に影響を与える可能性があります。

于 2013-01-04T08:29:47.677 に答える