【问题标题】:WSO2 EI 6.5.0 enable MTOM in SOAP service responseWSO2 EI 6.5.0 在 SOAP 服务响应中启用 MTOM
【发布时间】:2021-05-27 17:24:57
【问题描述】:

我需要创建 Soap Operation GetFile 以使用 MTOM 响应文件内容和附加标签(响应 Content-Type multipart/related):

    <Response>
        <file>
            <id>1</id>
            <name>Filename.pdf</name>
            <content>
                <xop:Include href="cid:test" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
            </content>
        </file>
    </Response>

我有代理,它调用外部服务来获取文件内容,然后我使用 PayloadFactory 调解器生成有效负载(在这种情况下,$body/* 是来自外部服务的文件二进制内容,为简单起见,id 和名称是硬编码的):

<payloadFactory media-type="xml">
  <format>
      <Response>
          <file>
              <id>$1</id>
              <name>$2</name>
              <content>$3</content>
          </file>
      </Response>
  </format>
  <args>
      <arg value="1"/>
      <arg value="fileName.pdf"/>
      <arg evaluator="xml"
              expression="$body/*"/>
  </args>
</payloadFactory>
<property name="enableMTOM" scope="axis2" type="STRING" value="true"/>
<respond/>

作为回应,我得到:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <Response xmlns="http://ws.apache.org/ns/synapse">
            <file>
                <id>1</id>
                <name>fileName.pdf</name>
                <content>base64content</content>
            </file>
        </Response>
    </soapenv:Body>
</soapenv:Envelope>

如果我删除该 payloadFactory,那么我会得到正确的多部分/相关响应,因此 enableMTOM 属性有效(但我需要额外的自定义标签):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:binary xmlns:ns="http://ws.apache.org/commons/ns/payload">
            <xop:Include href="cid:1" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
        </ns:binary>
    </soapenv:Body>
</soapenv:Envelope>

在这种情况下,是否只有带有 messageContext.addAttachment 的自定义调解器解决方案?在这种情况下有什么最佳做法 - 将接收到的文件内容保存在本地服务器上,然后将其用作附件?

【问题讨论】:

    标签: wso2 mtom


    【解决方案1】:

    如果您使用 Payload factory mediator 构建消息负载,并希望将响应作为“multipart/form-data”发送,则需要在 Payload factory mediator 之后设置响应的消息类型。您可以使用以下属性来设置响应的消息类型。

    <property name="messageType" value="multipart/form-data" scope="axis2"/>
    

    此外,当我们使用 Payload factory mediator 操作文件内容时,消息上下文会在 Payload factory mediator 中构建并以 base64 编码值的形式返回。为了解码内容,您需要将以下属性添加到您的代理配置中。

    <property name="DECODE_MULTIPART_DATA" value="true" scope="axis2" action="set" type="BOOLEAN"/>
    

    请参阅MTOM and SwA Optimizations and Request/Response Correlation 上最新的 WSO2 文档了解更多详情。

    在内容感知中介场景(消息被构建的地方)中,您可以使用以下属性来解码发送到后端的多部分消息。否则,传出消息将采用编码形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      相关资源
      最近更新 更多