【问题标题】:Return empty response in REST API in WSO2 ESB在 WSO2 ESB 的 REST API 中返回空响应
【发布时间】:2016-06-28 10:32:31
【问题描述】:

我在 WSO2 ESB 4.9.0 中有一个 API Artifact,它提供了一个简单的 PUT REST 服务。

PUT 服务在此处简化了传入请求的日志,然后应使用不带任何内容的 HTTP 代码 200 进行响应。

这是 API 资源:

<api xmlns="http://ws.apache.org/ns/synapse" name="myapi" context="/context">
    <resource methods="PUT" uri-template="/resource">
        <inSequence>
            <log level="custom">
                <property name="PUT" value="/v1/updateWorkflowData" />
            </log>
            <property name="NO_ENTITY_BODY" value="true" scope="axis2" />
            <property name="HTTP_SC" value="200" scope="axis2" />
            <respond />
        </inSequence>
    </resource>
</api>

将属性“NO_ENTITY_BODY”设置为 true(在 GET 请求中使用)我得到以下异常:

    [2016-06-28 12:27:27,524] ERROR - PassThroughHttpSSLSender Failed to submit the response
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:468)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:267)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212)
        at org.apache.synapse.mediators.builtin.RespondMediator.mediate(RespondMediator.java:28)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
        at org.apache.synapse.rest.Resource.process(Resource.java:297)
        at org.apache.synapse.rest.API.process(API.java:378)
        at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:97)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:65)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:266)
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:363)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
        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:745)
[2016-06-28 12:27:27,555] ERROR - Axis2Sender Accept-Encoding:gzip,deflate,Content-Type:application/json,Host:localhost:8243,<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back
org.apache.axis2.AxisFault: Failed to submit the response
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:610)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:269)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212)
        at org.apache.synapse.mediators.builtin.RespondMediator.mediate(RespondMediator.java:28)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
        at org.apache.synapse.rest.Resource.process(Resource.java:297)
        at org.apache.synapse.rest.API.process(API.java:378)
        at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:97)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:65)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:266)
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:363)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
        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:745)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:468)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:267)
        ... 20 more

我现在的问题是:

  1. 常规:当请求确实包含某些内容时,如何将响应设置为空?
  2. 我的“NO_ENTITY_BODY”解决方案是否错误且不起作用?

【问题讨论】:

    标签: rest wso2 wso2esb


    【解决方案1】:

    1) 您可以使用脚本中介将响应正文替换为空字符串。也可能有其他方法可以做到这一点。脚本中介是一个选项。

    2) "NO_ENTITY_BODY" 用于指定您期望来自没有正文的请求的响应。例如 GET 请求。

    【讨论】:

      【解决方案2】:

      NO_ENTITY_BODY 期望为布尔值,因此您必须添加类型属性:

      <property name="NO_ENTITY_BODY" value="true" scope="axis2" type="BOOLEAN" />
      

      【讨论】:

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