为什么Mule不能正确解析从Web服务返回的XML?

时间:2018-04-12 21:19:47

标签: xml mule mule-component anypoint-studio

我对此有点新意,但我遇到的问题必须有一个我不了解的简单解决方案。

我使用HTTP连接器调用Web服务,webservice返回有效的XML。然后,我无法自动返回未经修改的XML或者

No serializer found for class org.glassfish.grizzly.utils.BufferInputStream and no properties discovered to create BeanSerializer

所以我想这是因为响应是流式的,我需要先将Byte Array做到[无论如何]。但是,当我这样做时,引号和新行字符会像这样转义

"<?xml version=\"1.0\"?>\r\n<root xmlns=\"http://xmlns.whatever.com"><PERSON type=\"staff\"><ID><![CDATA[00100762]]></ID></PERSON></root>"

如果我尝试使用变换器将其转换为普通字符串,xml,json或其他什么,我最终会得到所有这些转义字符。如果我转换为字符串,我将把整个有效负载放在双引号内,如上所示。如果我将其转换为XML,我最终会得到一个包含转义XML字符串的单个元素。

我已经编写了一个node.js应用程序,该应用程序也使用了这个Web服务,并且能够毫无问题地解析响应,那么与Mule的交易是什么?呼叫网络服务并获得我可以解析的响应应该是最基本的事情,我无法使其发挥作用。

3 个答案:

答案 0 :(得分:0)

此行为暗示我没有设置有效负载的mime类型。 Mule变换器使用它来解析任何传入的格式。

有一个bug in mule 3.8.4(固定在3.8.5及以上),它没有从内容类型响应标头设置。一个简单的解决方法是在http请求之后立即在集合有效负载消息处理器中明确设置mime-type:

<set-payload value="#[payload]" doc:name="Set Payload" mimeType="application/xml"/>

这有望带来更多预期的行为。

编辑:在阅读您的回复后,我现在怀疑上游服务实际上是将xml作为json字符串返回。所以我会尝试将它从json转换为xml的java字符串。

 <json:json-to-object-transformer returnClass="java.lang.String" doc:name="JSON to Object" mimeType="application/xml"/>

答案 1 :(得分:0)

在mule HTTP请求中返回流响应。所以你需要使用字节数组转换为字符串。然后你可以根据需要使用该字符串转换xml或json。

答案 2 :(得分:0)

好吧,我不知道为什么会这样,但我更新了Mule ESB 4.1,我不再有问题了。