代码之家  ›  专栏  ›  技术社区  ›  Crelley

WSO2 ESB-从后端通过层时发送不需要的空JSON负载

  •  0
  • Crelley  · 技术社区  · 6 年前

    我对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负载:

    {"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 回复  |  直到 6 年前
        1
  •  0
  •   amg_amit    6 年前

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

        2
  •  0
  •   Crelley    6 年前

    我最终解决了这个问题。原来是axis2中消息生成器之间的冲突。xml属性,因此无法正确生成消息。无论如何,谢谢你的建议!

    推荐文章