我正在尝试将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>
感谢您的帮助!
答案 0 :(得分:4)
假设format是text / xml,您应该使用header mediator设置SOAP Action。如果没有SOAP Action,您可以设置一个空白的:
<header name="Action" value=""""/>