【问题标题】:WSO2 ESB Payload Factory creates invalid SOAP envelopeWSO2 ESB Payload Factory 创建无效的 SOAP 信封
【发布时间】:2014-01-16 20:33:13
【问题描述】:

我正在尝试将 REST 请求转换为 WSO2 的 ESB 中的 SOAP 请求。因此,我在 ESB 中创建了一个提供 REST 端点的 API。在这个 API 中,每个资源都有一个 In-Sequence,其中包含一个 Payload Factory Mediator。该中介将 REST 请求转换为 SOAP 消息。然后将 SOAP 消息发送到我之前定义的自定义 ESB 代理。

这是问题所在:当我发送 REST 请求时,请求被处理并转换为 SOAP,但响应 HTML 状态代码为 500。因此,我在 ESB 中激活了 SOAP 消息跟踪器来检查哪些消息是进来并检查消息是如何由 Payload Factory Mediator 创建的。

Payload Factory 生成的 SOAP 消息看起来肯定是错误的,如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
     <soapenv:Envelope>
        <soapenv:Body>
           <mms:getCarData xmlns:mms="mms.cardiag"/>
        </soapenv:Body>
     </soapenv:Envelope>
  </soapenv:Body>

如您所见,消息中创建了第二个&lt;soapenv:Envelope&gt; + 正文。我不知道为什么会发生这种情况,关键是因为我非常密切地关注了 WSO2 文档的Example 800

我也在我的 REST API 中提供了资源的实现,因此您可以检查我对 Payload Factory Mediator 的配置。我确信我错过了一些重要的东西,但很遗憾,我无法弄清楚是什么。

<resource methods="GET" uri-template="/cardata">
  <inSequence>
     <payloadFactory media-type="xml">
        <format>
           <mms:getCarData xmlns:mms="mms.cardiag"/>
        </format>
        <args/>
     </payloadFactory>
     <log level="full" category="TRACE"/>
     <send>
        <endpoint>
           <address uri="http://wso2-1:8280/services/TestProxy" format="soap11"/>
        </endpoint>
     </send>
  </inSequence>
  <outSequence>
     <send/>
  </outSequence>

感谢您的帮助!

【问题讨论】:

    标签: soap wso2 wso2esb


    【解决方案1】:

    假设格式是 text/xml,你应该使用 header mediator 设置 SOAP Action。如果没有 SOAP Action,您可以设置一个空白:

    <header name="Action" value="&quot;&quot;"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多