【问题标题】:WSO2 ESB sending MTOM encoded request from proxy serviceWSO2 ESB 从代理服务发送 MTOM 编码请求
【发布时间】:2015-08-04 08:38:25
【问题描述】:

我需要从 WSO2 ESB 代理服务发送 MTOM 编码请求。 我正在设置参数:

<property name="enableMTOM" value="true" scope="axis2" type="STRING"/>
<property name="messageType" value="multipart/related" scope="axis2" type="STRING"/>

而且效果很好。

请求的标头:

POST /alfresco/cmisws/DiscoveryService HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: multipart/related; boundary="MIMEBoundary_a62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02"; type="application/xop+xml"; start="<0.b62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02@apache.org>"; start-info="text/xml"
SOAPAction: "urn:mediate"
Transfer-Encoding: chunked
Host: 127.0.0.1:8181
Connection: Keep-Alive
User-Agent: Synapse-PT-HttpComponents-NIO

67b
--MIMEBoundary_a62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.b62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02@apache.org>

但我需要将我的代理服务称为 HTTP GET。因此,当我需要从代理服务发送 MTOM 编码请求时,我在端点定义中设置了附加属性 format="soap11"。 并且消息不再是 MTOM 编码 - Content-Type 是 text/xml

POST /alfresco/cmisws/DiscoveryService HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml
Transfer-Encoding: chunked
Host: 127.0.0.1:8181
Connection: Keep-Alive
User-Agent: Synapse-PT-HttpComponents-NIO

678
--MIMEBoundary_c62df4c2a350faee60d6513af54c07e7035aa06bcf30bf02
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.d62df4c2a350faee60d6513af54c07e7035aa06bcf30bf02@apache.org>

没有 format="soap11" 属性我会出错

SequenceMediator Error while building message
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,530]
Message: The element type "body" must be terminated by the matching end-tag "</body>".
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)

序列定义:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="GetDocIdFromAlfresco">

    <property name="enableMTOM" value="true" scope="axis2" type="STRING"/>
    <property name="messageType" value="multipart/related" scope="axis2" type="STRING"/>

    <payloadFactory media-type="xml">
       .
       .
       .
    </payloadFactory>

    <call>
        <endpoint>
            <address uri="http://localhost:8080/alfresco/cmisws/DiscoveryService" format="soap11"/>
        </endpoint>
    </call>
    <respond/>
</sequence>

如何从称为 HTTP GET 的代理服务发送 MTOM 编码请求?

【问题讨论】:

  • 将 optimize="mtom" 属性添加到您的地址端点会使其工作吗?
  • 否,optimize="mtom" 属性与设置 的效果相同。

标签: wso2 wso2esb mtom


【解决方案1】:

我之前遇到过这种情况:似乎 ESB 不允许创建启用 mtom 的 get-request,因为 mtom-ifie 没有内容。但是对于 CMIS,你真的需要这个:CMIS 规范指定所有请求,包括 GET 请求,都应该被编码。

最后,我通过创建一个自定义中介来解决这个问题,该中介通过 OpenCMIS java api 进行所有 CMIS 联系。

【讨论】:

  • 我正在使用代理接收带有附件的 SOAP 消息; SWA。但是,我在连线日志中看不到附件的二进制数据。你能给出一些将 SwA 发送到代理并将其存储到 jms 存储中的想法吗
【解决方案2】:

您不能使用 GET 请求发送 multipart,因为它不应包含正文,仅包含标头。

【讨论】:

  • 是的,这是真的,但我的问题不在于使用 GET 请求发送多部分。我需要将我的代理服务称为 HTTP GET,我的代理服务将转换为多部分并调用另一个(外部)Web 服务。当我将我的代理服务称为肥皂 ws 时,它工作正常。但是当我将代理服务调用为 HTTP GET 时,我需要在地址元素(端点)中设置 format="soap11" 属性,它不再起作用 - 因为内容类型错误。
猜你喜欢
  • 2017-02-07
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多