WSO2 ESB: respuesta XML en la llamada a la API REST WSO2 no analizada
soap wso2esb (1)
Al final, el problema principal apareció en la configuración adecuada de MessageBuilder. Siempre que la respuesta del servicio fuera un simple XML y como tal se marcó en el encabezado de respuesta, WSO2 lo pasó al cliente sin problemas. Una vez que la respuesta se marcó de manera diferente, en mi caso fue application / atom + xml, el MessageBuilder predeterminado no se aplicó y, por lo tanto, WSO2 esperaba que el enlace fuera SOAP. Agregué una configuración del constructor al / repository / conf / axis2 / axis2.xml:
<messageBuilder class="org.apache.axis2.builder.ApplicationXMLBuilder" contentType="application/atom+xml"/>
Funciona bien ahora
Consulte https://docs.wso2.com/display/ESB480/Working+with+Message+Builders+and+Formatters y https://docs.wso2.com/display/ESB402/Message+Relay+Building+Blocks
Tengo problemas para procesar una respuesta XML simple de mi API REST en un servicio de proxy WSO2 ESB (4.8.1). Mi outSequence obviamente espera que la carga útil del resultado de la llamada API sea un mensaje SOAP que no es (XML simple) lo que da como resultado un error mientras se procesa. Uso el punto final de HTTP, pero se produce el mismo error cuando uso el punto final de dirección. Tengo que usar GET como método de solicitud ya que la API no permite POX. (El problema parece ser similar al que ya se mencionó en WSO2 ESB: registrar y convertir la respuesta del servicio RDF REST de nuevo a SOAP, sin embargo, no parece estar solucionado en ESB 4.8.1 y no puedo usar el trabajo -alrededor mencionado allí)
Aquí está mi punto final:
<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>
Aquí está el 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>
Esta es la respuesta que recibo de la API:
<?xml version="1.0" encoding="UTF-8"?>
<ticket>TICKET_605cbf0977db895db9bbc6e5eb6d4dba75454cc4</ticket>
Y este es el error que recibo una vez que trato de registrar la respuesta:
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
¿Alguien aquí encuentra una solución para esto?