【发布时间】: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>
如您所见,消息中创建了第二个<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>
感谢您的帮助!
【问题讨论】: