Error while PUT without request body: No JSON payload provided

1k views Asked by At

I have a proxy service that based on HTTP Method sends the request to an application hosted by WSO2 Application Server or to a data service on WSO2 Data Services Server.

Some PUT operations needs no request body, since they just change something based on URI semantics, but I can't getting this works when I PUT without a payload.

The service look like this:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="IntegrationProxy" transports="http https" statistics="disable" trace="disable" startOnLoad="true">
    <target>
        <inSequence>
            <property name="original.content-type" expression="$trp:Content-Type" type="STRING"/>
            <property name="FORCE_POST_PUT_NOBODY" value="true" scope="axis2" type="BOOLEAN"/>
            <property name="Content-Type" value="get-property('original.content-type')" scope="transport"/>

            <property name="as.host" value="http://as-host:9763" type="STRING"/>
            <property name="dss.host" value="http://dss-host:9763" type="STRING"/>
            <property name="uri.var.as.service.url" expression="fn:concat(get-property('as.host'), '/rest/integracao')"/>
            <property name="uri.var.dss.service.url" expression="fn:concat(get-property('dss.host'), '/services/Integrations')"/>
            <log level="custom" separator="\n">
                <property name="ProxyNameIn" value="IntegrationProxy - inSequence"/>
            </log>
            <log level="custom" separator="\n">
                <property name="Original-Content-Type" expression="get-property('original.content-type')"/>
                <property name="Content-Type" expression="get-property('Content-Type')"/>
                <property name="FORCE_POST_PUT_NOBODY" expression="$axis2:FORCE_POST_PUT_NOBODY"/>
                <property name="Method" expression="$axis2:HTTP_METHOD"/>
            </log>
            <switch source="$axis2:HTTP_METHOD">
                <case regex="GET">
                    <property name="called.url" expression="fn:concat(get-property('uri.var.dss.service.url'), $axis2:REST_URL_POSTFIX)"/>
                    <send>
                        <endpoint>
                            <http uri-template="{uri.var.dss.service.url}" method="$axis2:HTTP_METHOD"/>
                        </endpoint>
                    </send>
                </case>
                <default>
                    <property name="called.url" expression="fn:concat(get-property('uri.var.as.service.url'), $axis2:REST_URL_POSTFIX)"/>
                    <send>
                        <endpoint>
                            <http uri-template="{uri.var.as.service.url}" method="$axis2:HTTP_METHOD"/>
                        </endpoint>
                    </send>
                </default>
            </switch>
        </inSequence>
        <outSequence>
            <log level="custom" separator="\n">
                <property name="CalledURL" expression="get-property('called.url')" />
                <property name="ProxyNameOut" value="IntegrationProxy - outSequence"/>
            </log>
            <send />
        </outSequence>
    </target>
</proxy>

Even using FORCE_POST_PUT_NOBODY we're receiving org.apache.axis2.AxisFault: No JSON payload provided. Below the full stack trace:

wso2_esb_apis | [2016-12-20 13:43:04,954] ERROR - JsonUtil #newJsonPayload. Could not save JSON payload. Invalid input stream found. MessageID: urn:uuid:222c9ec6-6085-4344-8622-d7ff76fc7d13
wso2_esb_apis | [2016-12-20 13:43:04,955] ERROR - DeferredMessageBuilder Error building message
wso2_esb_apis | org.apache.axis2.AxisFault: No JSON payload provided.
wso2_esb_apis |     at org.apache.synapse.commons.json.JsonStreamBuilder.processDocument(JsonStreamBuilder.java:52)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:138)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:133)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:98)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
wso2_esb_apis |     at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
wso2_esb_apis |     at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
wso2_esb_apis |     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:363)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
wso2_esb_apis |     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
wso2_esb_apis |     at java.lang.Thread.run(Thread.java:745)
wso2_esb_apis | [2016-12-20 13:43:04,956] ERROR - RelayUtils Error while building Passthrough stream
wso2_esb_apis | org.apache.axis2.AxisFault: No JSON payload provided.
wso2_esb_apis |     at org.apache.synapse.commons.json.JsonStreamBuilder.processDocument(JsonStreamBuilder.java:52)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:138)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:133)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:98)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
wso2_esb_apis |     at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
wso2_esb_apis |     at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
wso2_esb_apis |     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:363)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
wso2_esb_apis |     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
wso2_esb_apis |     at java.lang.Thread.run(Thread.java:745)
wso2_esb_apis | [2016-12-20 13:43:04,958] ERROR - SequenceMediator Error while building message
wso2_esb_apis | org.apache.axis2.AxisFault: Error while building Passthrough stream
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.handleException(RelayUtils.java:283)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:142)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:98)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
wso2_esb_apis |     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
wso2_esb_apis |     at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
wso2_esb_apis |     at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
wso2_esb_apis |     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:363)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
wso2_esb_apis |     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
wso2_esb_apis |     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
wso2_esb_apis |     at java.lang.Thread.run(Thread.java:745)
wso2_esb_apis | Caused by: org.apache.axis2.AxisFault: No JSON payload provided.
wso2_esb_apis |     at org.apache.synapse.commons.json.JsonStreamBuilder.processDocument(JsonStreamBuilder.java:52)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:138)
wso2_esb_apis |     at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:133)
wso2_esb_apis |     ... 13 more
wso2_esb_apis | [2016-12-20 13:43:04,960]  INFO - LogMediator To: /services/SGTIntegracoesProxy/atendimentos/39679/aceito?idregional=11, MessageID: urn:uuid:222c9ec6-6085-4344-8622-d7ff76fc7d13, Direction: request, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Error while building message, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope>
  • WSO2 ESB version: 4.9.0
  • Java:
    • java version "1.7.0_79"
    • Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
    • Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

With a body like {} works fine, but I look for a "transparent" solution, without such workaround. Does anyboby have an issue like that?

UPDATE: this works with WSO2 ESB 5.0.0: https://wso2.org/jira/browse/ESBJAVA-4270. Does anyone upgraded "easily" to 5.0.0? Or better, does anyone knows a patch to this, without other changes?

0

There are 0 answers