2

我目前正在使用 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,但目前还可以。稍后我会再看看它,也许这是一个错误。

4

0 回答 0