WSO2 ESB: XML response in WSO2 REST API call is not processed

I'm having trouble handling a simple XML response from my REST API in the WSO2 ESB Proxy Service (4.8.1). My outSequence is obviously showing the payload of the result of the API call as a SOAP message that is not (plain XML), resulting in an error on further processing. I am using HTTP endpoint but same error occurs when using address endpoint. I have to use GET as the request method as the API doesn't allow POX. (The problem seems to be similar to the one already mentioned in WSO2 ESB: registering and transforming the response from the RDF REST service back to SOAP , however it doesn't seem to be fixed in ESB 4.8.1 and I can't use the work described there)

Here is my end point:

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Alfresco_login">
   <http uri-template="http://localhost:8080/alfresco/service/api/login?u={query.param.name}&pw={query.param.password}" method="get"></http>
</endpoint>

      

Here is the proxy:

<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="Alfresco_proxy"
       transports="https,http">
   <target endpoint="Alfresco_login">
      <inSequence>
         <property name="query.param.name" value="XXX"/>
         <property name="query.param.password" value="XXX"/>
      </inSequence>
      <outSequence>
         <log/>
         <send/>
      </outSequence>`enter code here`
   </target>
   <description/>
</proxy>

      

This is the response I get from the API:

<?xml version="1.0" encoding="UTF-8"?>
<ticket>TICKET_605cbf0977db895db9bbc6e5eb6d4dba75454cc4</ticket>

      

And this is the error I get one day, I am trying to log the response:

ERROR_EXCEPTION : org.apache.synapse.SynapseException: Error while building message
ERROR_DETAIL : org.apache.synapse.SynapseException: Error while building message at org.apache.synapse.mediators.AbstractMediator.handleException(AbstractMediator.java:313) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70) 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:745) Caused by: org.apache.axis2.AxisFault: Error while building Passthrough stream at org.apache.synapse.transport.passthru.util.RelayUtils.handleException(RelayUtils.java:236) at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:111) at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:82) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:68) ... 11 more Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found ticket at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:305) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:252) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:234) at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154) at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73) at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79) at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196) at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:55) at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:118) at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:107) ... 13 more

      

Has anyone here found a fix for this?

+3


source to share


1 answer


In the end, the main problem seemed to be the correct configuration of the MessageBuilder. As long as the service response was plain XML and as such was tagged in the response header, WSO2 passed it off to the client just fine. Once the answer was marked differently - in my case it is app / atom + xml, there was no MessageBuilder applied by default and so WSO2 expected the continent to be SOAP. I added the linker config to \ repository \ conf \ axis2 \ axis2.xml:

<messageBuilder class="org.apache.axis2.builder.ApplicationXMLBuilder" contentType="application/atom+xml"/>

      



Works fine now.

See https://docs.wso2.com/display/ESB480/Working+with+Message+Builders+and+Formatters and https://docs.wso2.com/display/ESB402/Message+Relay+Building+Blocks

+5


source







All Articles