You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4中Transform Message/Set Payload定义XML Payload报错解决

在Transform Message组件中正确定义XML Payload并实现XML-JSON-XML转换流程

一、正确生成目标XML Payload

别直接粘贴转义后的XML字符串,用DataWeave结构化生成最稳妥,能避免转义错误和命名空间问题:

%dw 2.0
output application/xml writeDeclaration=true
ns env http://schemas.xmlsoap.org/soap/enveloper/
ns wd urn:com.xyz/abcd
---
env#Envelope: {
    env#Body: {
        wd#GetMappingTable @(wd#version: "v40.0"): {
            wd#RequestRef: {
                wd#MappingRef: {
                    wd#MappingId @(wd#type: "Integration_Mapping_ID"): "ACCOUNT_MP"
                }
            },
            wd#ResponseFil: {
                wd#page: 1,
                wd#count: 10
            }
        }
    }
}

关键说明:

  • writeDeclaration=true 会自动生成XML声明头,和原XML格式一致
  • ns 定义命名空间缩写,对应原XML里的env和wd,URI要完全匹配(注意原XML里的enveloper别写成envelope)
  • 用#关联命名空间和元素,@()用来处理XML属性

如果非要用字符串形式,把转义符还原后用"""包裹多行内容:

%dw 2.0
output application/xml
---
"""
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/enveloper/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <env:Body>
    <wd:GetMappingTable xmlns:wd="urn:com.xyz/abcd" wd:version="v40.0">
      <wd:RequestRef>
        <wd:MappingRef>
          <wd:MappingId wd:type="Integration_Mapping_ID">ACCOUNT_MP</wd:MappingId>
        </wd:MappingRef>
      </wd:RequestRef>
      <wd:ResponseFil>
        <wd:page>1</wd:page>
        <wd:count>10</wd:count>
      </wd:ResponseFil>
    </wd:GetMappingTable>
  </env:Body>
</env:Envelope>
"""

二、实现XML转JSON再转回XML的完整流程

按以下顺序配置Mule流组件:

  1. Transform Message:用上面的DataWeave代码生成原始XML
  2. Transform Message:转成JSON
    %dw 2.0
    output application/json
    ---
    payload
    
  3. Transform Message:转回XML(要保证结构和原XML一致,推荐手动映射)
    %dw 2.0
    output application/xml writeDeclaration=true
    ns env http://schemas.xmlsoap.org/soap/enveloper/
    ns wd urn:com.xyz/abcd
    ---
    env#Envelope: {
        env#Body: {
            wd#GetMappingTable @(wd#version: payload.Envelope.Body.GetMappingTable."@wd:version"): {
                wd#RequestRef: {
                    wd#MappingRef: {
                        wd#MappingId @(wd#type: payload.Envelope.Body.GetMappingTable.RequestRef.MappingRef.MappingId."@wd:type"): payload.Envelope.Body.GetMappingTable.RequestRef.MappingRef.MappingId
                    }
                },
                wd#ResponseFil: {
                    wd#page: payload.Envelope.Body.GetMappingTable.ResponseFil.page as Number,
                    wd#count: payload.Envelope.Body.GetMappingTable.ResponseFil.count as Number
                }
            }
        }
    }
    
    如果不需要严格匹配属性,也可以直接用payload自动转换,但可能丢失命名空间属性,不推荐。
  4. HTTP Requester:发送最终XML,记得设置请求头Content-Type: application/xml

常见错误排查

  • 命名空间URI写错:原XML里的http://schemas.xmlsoap.org/soap/enveloper/末尾是enveloper,别写成envelope
  • 转义字符残留:直接粘贴带&lt;/&gt;的XML会导致解析失败,必须还原或用结构化生成
  • 属性处理错误:XML属性要在DataWeave里用@()定义,不能当成元素内容

内容的提问来源于stack exchange,提问作者Devendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:06:27