当前位置: 首页 > 知识库问答 >
问题:

WSO2 ESB:WSO2 REST API调用中的XML响应未解析

武骁
2023-03-14

我在WSO2 ESB(4.8.1)代理服务中处理来自REST API的纯XML响应时遇到了麻烦。显然,我的outSequence将API调用结果有效负载导出为SOAP消息,而它不是SOAP消息(纯XML),在进一步处理它时导致错误。我使用HTTPendpoint,但使用Addressendpoint时也会出现同样的错误。我必须使用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

这里有人想办法解决吗?

共有1个答案

尉迟宇定
2023-03-14

最后,主要问题出现在正确的MessageBuilder配置中。只要服务响应是一个简单的XML并且在响应头中标记,那么WSO2就可以很好地将其传递给客户机。一旦响应标记不同--在我的例子中是Application/Atom+XML,默认的MessageBuilder就没有应用,因此WSO2期望内容是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+and+formatters和https://docs.wso2.com/display/esb402/message+relay+building+blocks

 类似资料:
  • 由于某种原因,我遇到了一个解析错误。我把范围缩小到“什么”,而不是“为什么”。 以下是我的测试脚本: 通过上面的测试xml字符串,我得到了“无法…”条件然而,当我取出“”时,它工作了!显然simplexml_load_string()有一些细节。但我收到了这个带有的响应,我不想首先执行查找/替换脚本。 还有,我这样做对吗?最后,我需要开始解析CUS帐户,提取其中的数据。

  • 我有一个关于钥匙斗篷的问题。我有安装Keycloak独立,wildfly与Keycloak适配器,并希望访问我的服务在wildfly中部署的Rest点,这是由Keycloak保护的。没有keycloaksecurity的Rest运行良好。但是当我想访问安全endpoint时,我总是得到一个未经授权的响应。 我的客户机(JavaFX)获得访问令牌很好,如果我输入错误的凭据,我会得到一个未经授权的异常

  • 我在将XML SOAP返回转换为相应的POJO类时遇到问题。XML返回如下所示: 我尝试使用Jackson XMLMAPER,但是在反序列化过程中,我不能把它作为根元素考虑返回节点。它将“信封”节点视为根节点。 我需要只提取返回节点并转换到我的pojo类。 另一个问题是“项目”节点应该是集合的一部分,但是没有对这些元素进行分组的父节点。 有没有人知道一个解析器可以对这种类型的xml进行反序列化?

  • 问题内容: 我正在使用JQuery执行Web服务调用,它是ajax函数,无法解析返回的数据。当我警告数据(alert($(data).find(“ return”)。text())为空时,我看到服务器响应xml数据,如下所示,当我警告(数据)时,我得到了[object XMLDocument给定我的XML结构并在下面使用命名空间,txt = $(data).find(“ return”)。text

  • 问题内容: 我有一个使用XML响应请求的服务器,我想在javascript中解析它。我真的很喜欢ActionScript XML解析器,它对我来说很容易使用。我在徘徊是否有一种非常简单/直接的方法来解析我从服务器获取的XML? 理想的用法应该是: fetchXML新的XMLParser。parser.parse访问文档。 顺便说一句,我计划使用jQuery。 问题答案: 一个普通的with 会解决

  • 问题内容: 我的Go服务器正在处理我首先打电话给的请求,以便设置响应的状态代码。之后,我开始将字节写入响应主体。如果我在复制字节时浏览器取消了请求,则会收到错误消息: 我的代码检测到此错误,然后调用。这再次调用。 这似乎是一个问题,但我不确定。可以避免吗?写入响应正文时发生错误时,如何避免再次调用? 谢谢! 问题答案: 的呼叫开始通过网络将响应发送到客户端。回应一经进行,便无法退回。您唯一可以做的