WSO2 ESB - 从后端传递层时发送不需要的空JSON有效负载

时间:2018-03-28 15:24:54

标签: json wso2 wso2esb esb

我是WSO2开发的新手,所以这对某人来说可能很容易解决!

我正在创建一个演示API,以便更多地熟悉WSO2开发。我目前仍然坚持将ESB中的有效负载从后端(使用Wiremock模拟)传递到另一个端点。我可以在ESB日志中看到有效负载进入ESB但它保留为0或我认为是空的。

我还有什么额外的补充吗?我只是在switch语句中放置一个发送中介(检查HTTP状态,例如200)。我玩过有效的工厂,但也是如此。

ESB日志:

TID: [0] [ESB] [2018-03-28 15:56:48,652] DEBUG {org.apache.synapse.transport.http.wire} -  >> "[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,652] DEBUG {org.apache.synapse.transport.http.wire} -  >> "{"result": 1}" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,699] DEBUG {org.apache.synapse.transport.http.wire} -  << "HTTP/1.1 200 OK[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "CorrelationId: 685454f5-e5f6-4837-b0b0-1e9e53798ea9[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "Content-Type: application/json[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "Date: Wed, 28 Mar 2018 14:56:48 GMT[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "Server: WSO2-PassThrough-HTTP[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "Transfer-Encoding: chunked[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "Connection: Keep-Alive[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,700] DEBUG {org.apache.synapse.transport.http.wire} -  << "[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,701] DEBUG {org.apache.synapse.transport.http.wire} -  << "0[\r][\n]" {org.apache.synapse.transport.http.wire}
TID: [0] [ESB] [2018-03-28 15:56:48,701] DEBUG {org.apache.synapse.transport.http.wire} -  << "[\r][\n]" {org.apache.synapse.transport.http.wire}

从Wiremock发送到ESB的JSON Payload:

{"result": 1}

我在使用payloadFactory时玩过,但无论如何都得到了相同的结果。如果它有帮助,我将包含我使用的payloadFactory代码:

<payloadFactory media-type="json">
<format>{"amount": $1}</format>
<args>
<arg evaluator="json" expression="$.result"/>
</args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<property name="contentType" value="application/json" scope="axis2"/>

任何帮助解决这个或尝试的事情都将非常感激!

2 个答案:

答案 0 :(得分:0)

尝试使用<arg evaluator="Xml" expression="//*[local-name()='result']"/>而不是<arg evaluator="json" expression="$.result"/>

答案 1 :(得分:0)

我最终解决了这个问题。原来是我的axis2.xml属性中的消息构建器之间存在冲突,因此消息永远无法正确构建。不管怎样,谢谢你的建议!