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

Why won't Mule properly parse XML returned from a webservice?

我对此有点陌生,但我遇到了一个问题,必须有一个我不知道的直接解决方案。

我正在使用 HTTP 连接器调用网络服务,网络服务 return 有效 XML。然后我不能自动 return XML 未修改或者我得到

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

所以我想那是因为响应是流式传输的,我需要先对 [whatever] 执行字节数组。但是,当我这样做时,引号和换行符会像这样转义

"<?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 有什么用呢?调用网络服务并获得我可以解析的响应应该是最基本的事情,但我无法让它工作。

此行为提示我未设置有效负载的 mime-type。 Mule 转换器使用它来解析任何传入格式。

有一个 bug in mule 3.8.4(已在 3.8.5 及更高版本中修复)未从 content-type 响应 header 中设置。一个简单的解决方法是在 http 请求后立即在 set payload 消息处理器中显式设置 mime-type:

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

这应该会带来更多预期的行为。


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

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

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

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