【问题标题】:WSO2 ESB - sending unwanted empty JSON payload when passing through tier from backendWSO2 ESB - 从后端通过层时发送不需要的空 JSON 有效负载
【发布时间】:2018-04-06 19:19:33
【问题描述】:

我对 WSO2 开发非常陌生,所以这对某人来说可能是一个简单的解决方法!

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

还有什么需要补充的吗?我只是在 switch 语句中放置了一个发送调解器(检查 HTTP 状态,例如 200)。我玩过一个payloadFactory,但它也是一样的。

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"/>

任何帮助解决此问题或尝试的事情将不胜感激!

【问题讨论】:

    标签: json wso2 wso2esb esb


    【解决方案1】:

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

    【讨论】:

    • 同样的结果,很遗憾
    • 用下面的属性替换
    • 也不走运;感觉后台有东西设置不正确
    • 我最终解决了这个问题。我的axis2属性有问题。我有各种消息构建器处于活动状态,它们相互冲突,因此它们只是错误地创建了一个空的有效负载。无论如何感谢您的帮助。
    【解决方案2】:

    我最终解决了这个问题。结果是我的axis2.xml属性中的消息构建器之间存在冲突,因此消息从未正确构建。无论如何感谢您的建议!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2020-09-04
      相关资源
      最近更新 更多