如何在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
相关产品推荐
相关产品推荐

