私は現在、WSO2 エンタープライズ サービス バス、いくつかの cxf ベースの Web サービス、および mtom 添付ファイルをいじっています。
SoapUI (MTOM 対応) を使用して、次の要求を 1 つのバックエンド サービスに送信します。
...
<incident>
....
<attachmentList>
<attachment>
<contentID>cid:soapui32.png</contentID>
</attachment>
</attachmentList>
</incident>
...
MTOM を有効にすると、Raw データは
...
<attachmentList>
<attachment>
<contentID>
<inc:Include href="cid:soapui32.png" xmlns:inc="http://www.w3.org/2004/08/xop/include"/>
</contentID>
</attachment>
</attachmentList>
...
------=_Part_0_22113723.1360006252844
Content-Type: image/x-png; name=soapui32.png
Content-Transfer-Encoding: binary
Content-ID: <soapui32.png>
Content-Disposition: attachment; name="soapui32.png"; filename="soapui32.png"
......
ここまでは順調ですね。次のステップとして、この Web サービス用の WSDL ベースのプロキシ サービス (WSO2 ESB 4.5.1) を作成します。
<proxy xmlns="http://ws.apache.org/ns/synapse" name="testService" transports="https,http" statistics="enable" trace="enable" startOnLoad="true">
<target>
<outSequence>
<send/>
</outSequence>
<endpoint>
<wsdl service="IncidentService" port="IncidentServicePort" uri="uri2myservicewsdl"/>
</endpoint>
</target>
<publishWSDL uri="uri2myservicewsdl"/>
<description></description>
</proxy>
axis2.xml で enableMTOM が true に設定されており、MTOM がプロキシ サービスに対して有効になっています。
SoapUI 経由で同じ添付ファイルを使用してまったく同じ要求を送信すると、esb は添付ファイルをインライン コンテンツ (デバッグ ログ) に変換します。
DEBUG - Starting Activation Handler invocation. Incoming Message:
......
<incident>
<attachmentList>
<attachment>
<contentID>iVBORw0KGgoAAAANSUh.....</contentID>
</attachment>
</attachmentList>
</incident>
.....
</soapenv:Body></soapenv:Envelope>
{org.wso2.carbon.activation.module.ActivationHandler}
プロキシがインライン コンテンツに変換しないようにするには、どこで MTOM を有効にできますか?
よろしくお願いします。
回避策
単なる回避策であっても、誰かが興味を持っているかもしれません:
axis2.xml (wso2 esb conf ディレクトリ) で MTOM および SwA 添付ファイルを有効にしました。
SwA を無効にして MTOM のみを有効にしたままにすると、添付ファイルはインライン コンテンツに変換されなくなります。
現在、SwA はすべてのプロキシ サービスで無効になっていますが、現時点では問題ありません。後でもう一度確認しますが、バグかもしれません。