WSO2 ESB Payload Factory创建无效的SOAP信封

时间:2014-01-16 11:31:53

标签: soap wso2 wso2esb

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

问题在于:当我发送REST请求时,请求被处理并转换为SOAP,但响应HTML状态代码为500.因此,我在ESB中激活了SOAP Message Tracer来检查,消息是什么进入并检查由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>

您可以很容易地看到,在邮件中创建了第二个<soapenv:Envelope> +正文。我无法弄清楚为什么会发生这种情况,因为我非常密切地关注了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>

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

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

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