WSO2 ESB PayloadFactory 中介器中的 JSON 格式

Posted

技术标签:

【中文标题】WSO2 ESB PayloadFactory 中介器中的 JSON 格式【英文标题】:JSON format in WSO2 ESB PayloadFactory mediator 【发布时间】:2013-12-29 10:13:57 【问题描述】:

PayloadFactory 中介我使用的是 JSON 格式的字符串。问题是,当我在 /repository/conf/axis2/axis2.xml 中启用以下行时,POST 请求工作正常,但 GET 请求会产生错误消息。

<!--messageFormatter contentType="application/json"
class="org.apache.axis2.json.JSONStreamFormatter"/-->
<!--messageBuilder contentType="application/json"
class="org.apache.axis2.json.JSONStreamBuilder"/-->

这是贝宝列出所有支付资源的 ESB 模板:

<template name="listPaymentResources" xmlns="http://ws.apache.org/ns/synapse">
  <sequence class="sequence">
    <payloadFactory media-type="json">
      <format>
        
      </format>
    </payloadFactory>
    <property name="messageType" scope="axis2" value="application/json" />
    <call>
      <endpoint>
        <http method="get" uri-template="uri.var.paypalUrl/v1/payments/payment"/>
      </endpoint>
    </call>
  </sequence>
</template>

代理服务:

<?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="listPaymentResources"
           transports="https,http"
           statistics="disable"
           trace="disable"
           startOnLoad="true">
       <target>
          <inSequence>
             <property xmlns:ns="uri.var.payment"
                       name="ppurl"
                       expression="//ns:paypalurl/text()"/>
             <PayPal.config>
                <appUri>$ctx:ppurl</appUri>
             </PayPal.config>
             <PayPal.listPaymentResources/>
             <respond/>
          </inSequence>
          <outSequence>
             <log/>
             <send/>
          </outSequence>
       </target>
       <description/>
    </proxy>

错误日志:

[2013-12-11 17:25:10,971] ERROR - TargetHandler Unexpected error: Cannot get a J
SON writer
java.lang.UnsupportedOperationException: Cannot get a JSON writer
        at org.apache.axis2.json.JSONStreamFormatter.getJSONWriter(JSONStreamFor
matter.java:63)
        at org.apache.axis2.json.AbstractJSONMessageFormatter.getTargetAddress(A
bstractJSONMessageFormatter.java:228)
        at org.apache.synapse.transport.passthru.TargetRequest.start(TargetReque
st.java:152)
        at org.apache.synapse.transport.passthru.TargetHandler.requestReady(Targ
etHandler.java:136)
        at org.apache.http.impl.nio.DefaultNHttpClientConnection.produceOutput(D
efaultNHttpClientConnection.java:244)
        at org.apache.synapse.transport.http.conn.LoggingNHttpClientConnection.p
roduceOutput(LoggingNHttpClientConnection.java:112)
        at org.apache.synapse.transport.passthru.ClientIODispatch.onOutputReady(
ClientIODispatch.java:88)
        at org.apache.synapse.transport.passthru.ClientIODispatch.onOutputReady(
ClientIODispatch.java:41)
        at org.apache.http.impl.nio.reactor.AbstractIODispatch.outputReady(Abstr
actIODispatch.java:148) 

【问题讨论】:

您使用的 Wso2 esb 版本是什么? 您能否向我们展示您在 EI_HOME/conf/axis2/axis2.xml 中的 messageBuilder 和 messageFormater 部分? 【参考方案1】:

我已经在最新版本的 WSO2 ESB 上对该主题进行了一些测试,但我无法重现这个给定的问题。

【讨论】:

以上是关于WSO2 ESB PayloadFactory 中介器中的 JSON 格式的主要内容,如果未能解决你的问题,请参考以下文章

在 WSO2 ESB 5.0.0 中使用 MyBatis 框架

WSO2 ESB聚类概念

如何在 WSO2 ESB 中访问注册表

使用 WSO2 ESB 从 HTTP 切换到 RabbitMQ

WSO2 ESB:后端恢复后地址端点不恢复发送

如何使用 wso2 esb 执行 ldap 搜索?