【问题标题】:Return JSON to Proxy with WSO2 ESB使用 WSO2 ESB 将 JSON 返回到代理
【发布时间】:2015-05-13 01:52:21
【问题描述】:

我是 WSO2 esb 的新手,一开始我想与我的外部 REST API 建立 http 连接并返回 JSON 响应。 要调用代理,我正在使用 Postman 并且请求成功,但 json 结果未显示在 postman 中,仅显示在 Log 中。 然后我添加了一个发送调解器,但生成如下异常:

ERROR - NativeWorkerPool Uncaught exception
java.lang.NullPointerException
    at org.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:210)
    at org.apache.coyote.http11.InternalNioOutputBuffer.commit(InternalNioOutputBuffer.java:202)
    at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:765)
    at org.apache.coyote.Response.action(Response.java:173)
    at org.apache.coyote.Response.sendHeaders(Response.java:353)
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:330)
    at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:283)
    at org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:108)
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.sendUsingOutputStream(PassThroughHttpSender.java:298)
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:261)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
    at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:163)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:321)
    at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:94)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:268)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

这是我的代理代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy" transports="http https" startOnLoad="true" trace="enable">
    <target>
        <inSequence>
            <property name="uri.var.name" value="Luca" scope="default" type="STRING"/>
            <send>
                <endpoint key="HelloWorld"/>
            </send>
        </inSequence>
        <outSequence>
            <log level="custom">
                <property name="content" expression="json-eval($.)"/>
            </log>
            <send description=""/>
        </outSequence>
        <faultSequence/>
    </target>
</proxy>

我做错了什么? 谢谢

【问题讨论】:

    标签: json proxy wso2 wso2esb esb


    【解决方案1】:

    看起来配置错误。 使用如下; &lt;send/&gt; 在 outsequence 中,如果您想将 json 响应发送回客户端,请在 outsequence 中也设置 messageType 属性。 例如:

    <property name="messageType" value="application/json" scope="axis2"/>
    

    例如:

    <outSequence>
      <property name="messageType" value="application/json" scope="axis2"/>
          <send/>
     </outSequence>
    

    【讨论】:

    • 谢谢,但对于这个属性,我也有同样的错误:[2015-03-12 09:34:48,789] INFO - LogMediator content = {"id":3,"content":"你好,卢卡!”} [2015-03-12 09:34:48,791] 错误 - NativeWorkerPool 在 org.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:210) 处未捕获异常 java.lang.NullPointerException。 apache.coyote.http11.InternalNioOutputBuffer.commit(InternalNioOutputBuffer.java:202) 在 org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:765) ...
    【解决方案2】:

    确保您访问了正确的服务端口。 如果您通过“尝试服务”链接并将其复制到您的工具中 - 那么您打错了端口,它将导致 NullPointerException。单击服务名称 == 您应该会看到“服务仪表板(代理)”页面。然后在“端点”部分中将列出您的服务端点的 url。

    【讨论】:

      【解决方案3】:

      当客户端使用 Servlet 传输端口(默认为 9443)而不是直通传输端口(默认为 8243)时,有时会发生此问题。检查您是否使用正确的端口来访问服务。服务调用应该通过 ESB 中的直通传输。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多