簡體   English   中英

WSO2 ESB:未解析WSO2 REST API調用中的XML響應

[英]WSO2 ESB: XML response in WSO2 REST API call not parsed

我在WSO2 ESB(4.8.1)代理服務中處理來自REST API的純XML響應時遇到了麻煩。 我的outSequence顯然將API調用結果有效負載轉換為SOAP消息,它不是(純XML),在進一步處理時會導致錯誤。 我使用HTTP端點但使用地址端點時會出現相同的錯誤。 我必須使用GET作為請求方法,因為API不允許使用POX。 (問題似乎與WSO2 ESB中已經提到過的問題類似:將RDF REST服務的響應和轉換回SOAP,但它似乎沒有在ESB 4.8.1中修復,我無法使用該工作 - 在那里提到)

這是我的終點:

<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>

這是代理:

<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>

這是我從API獲得的響應:

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

這是我嘗試記錄響應后得到的錯誤:

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

有人在這找到解決方案?

最后,主要問題出現在適當的MessageBuilder配置中。 只要服務響應是一個簡單的XML並且因此它在響應頭中標記,WSO2就將它傳遞給客戶端就好了。 一旦響應標記不同 - 在我的情況下它是application / atom + xml,默認的MessageBuilder沒有應用,因此WSO2期望contnent是SOAP。 我在\\ repository \\ conf \\ axis2 \\ axis2.xml中添加了一個構建器配置:

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

現在工作正常。

請參閱https://docs.wso2.com/display/ESB480/Working+with+Message+Builders+++Formattershttps://docs.wso2.com/display/ESB402/Message+Relay+Building+Blocks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM