我目前正在使用 WSO2 企业服务总线、一些基于 cxf 的 web 服务和 mtom 附件。
使用 SoapUI(启用 MTOM),我向一个后端服务提交以下请求:
...
<incident>
....
<attachmentList>
<attachment>
<contentID>cid:soapui32.png</contentID>
</attachment>
</attachmentList>
</incident>
...
启用 MTOM 原始数据为
...
<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,但目前还可以。稍后我会再看看它,也许这是一个错误。