Mulesoft如何获取Web Service Consumer响应中的Document字段值
Mule中提取Web Service Consumer响应Document字段实现方案
该需求完全可实现,提取失败的核心原因是返回结构存在两层嵌套XML,且内层XML做了HTML转义处理:外层是Web Service调用返回的SOAP响应XML,wsImprXMLResult节点内的内容是被转义的XML字符串,无法直接作为XML节点解析。
实现逻辑(基于Mule 4 DataWeave 2.0)
- 从Web Service Consumer的返回结果中提取
body字段,解析为外层XML对象 - 提取
wsImprXMLResult节点的字符串内容,执行HTML转义解码 - 将解码后的字符串解析为内层XML对象,直接提取
Document节点值
示例代码
%dw 2.0 import decodeHtml from dw::core::Strings output application/java --- // 解析外层SOAP响应XML var outerXml = payload.body as Xml // 提取转义的内层XML字符串并解码 var decodedInnerXml = decodeHtml(outerXml.wsImprXMLResponse.`wsImprXMLResult` as String) // 解析内层XML并提取Document字段 (decodedInnerXml as Xml).ArrayOfWsLabel.wsLabel.Document as String
注意事项
- 若外层XML命名空间导致节点无法识别,可在解析XML时指定命名空间配置,或通过
*忽略命名空间取值,示例:outerXml.*wsImprXMLResponse.*wsImprXMLResult - 若返回结果中存在多个
wsLabel节点,可通过索引定位目标节点,示例:innerXml.ArrayOfWsLabel.wsLabel[0].Document - Mule 3环境可通过MEL实现:先提取
payload.body用XmlParser解析外层节点,调用org.apache.commons.lang.StringEscapeUtils.unescapeHtml4解码内层字符串,再二次解析XML提取目标字段即可
内容的提问来源于stack exchange,提问作者Rodolfo
相关产品推荐
相关产品推荐

