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

如何在Mule 4应用中集中管理自定义XML命名空间?

Mule 4中集中管理XML自定义命名空间的方案探讨

应用与运行时版本: Mule 4应用,搭配XML Module。

我正尝试创建包含大量自定义XML命名空间的Mule应用,目前发现前缀需在本地声明,示例如下:

%dw 2.0
output application/xml
ns orders http://www.acme.com/shemas/Orders
ns stores http://www.acme.com/shemas/Stores
---
root:
    orders#orders: {
        stores#shipNodeId: "SF01",
        stores#shipNodeId @(shipsVia:"LA01"): "NY03"
    }

是否存在集中管理自定义XML命名空间的方法?


尝试方案一:自定义DataWeave模块导入命名空间

我尝试创建自定义模块并声明命名空间,再导入到DataWeave中,但最初的写法无效,仍需在本地声明前缀。

自定义Namespaces.dwl模块

ns myNs1 http://namespaces/my1
ns myNs2 http://namespaces/my2

初始无效的DataWeave代码

%dw 2.0
import * from modules::Namespaces
output application/java
---
{
    body: {
        myNs1#Response: {
            outcome: 'ACCEPTED'
        }
    } write "application/xml"
}

修改后可正常运行的代码

必须在本地将导入的命名空间转换为Namespace类型才能使用:

%dw 2.0
import * from modules::Namespaces
output application/java

var myNs1Local = myNs1 as Namespace

---
{
    body: {
        myNs1Local#Response: {
            outcome: 'ACCEPTED'
        }
    } write "application/xml"
}

本地声明前缀后即可正常运行。


尝试方案二:XML Module的namespace-directory组件

我尝试使用文档中介绍的namespace-directory,但文档仅说明其在XPath中的用法,不清楚如何在创建XML时使用相关配置。

示例配置代码

<xml-module:namespace-directory name="fullNs"> 
    <xml-module:namespaces>
        <xml-module:namespace prefix="soap" uri="http://schemas.xmlsoap.org/soap/envelope/"/>
        <xml-module:namespace prefix="mule" uri="http://simple.component.mule.org/"/>
    </xml-module:namespaces>
</xml-module:namespace-directory>

<flow name="xpathWithFullNs">
    <xml-module:xpath-extract
      xpath="/soap:Envelope/soap:Body/mule:echo/mule:echo"
      namespaceDirectory="fullNs"/> 
</flow>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:06:24