Mule 从自定义Dataweave模块导入xml命名空间

Mule 从自定义Dataweave模块导入xml命名空间,mule,dataweave,mule4,Mule,Dataweave,Mule4,我正在尝试创建一个自定义Dataweave模块来集中我的自定义XML名称空间 我遵循Mulesoft的官方文件: 它指出:“当您将自定义模块导入另一个DataWeave脚本时,模块中定义的任何函数、变量、类型和命名空间都可以在DataWeave主体中使用” 所以我希望我可以创建一个模块(在modules文件夹中),其中包含我的名称空间,如下所示:namespaces.dwl ns myNs1 http://namespaces/my1 ns myNs2 http://namespaces/my2

我正在尝试创建一个自定义Dataweave模块来集中我的自定义XML名称空间

我遵循Mulesoft的官方文件:

它指出:“当您将自定义模块导入另一个DataWeave脚本时,模块中定义的任何函数、变量、类型和命名空间都可以在DataWeave主体中使用”

所以我希望我可以创建一个模块(在modules文件夹中),其中包含我的名称空间,如下所示: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"
}
但是我得到了一个错误:

先前未使用ns声明前缀myNs1


我正在运行Mule 4.3.0,正如aled所指出的,这可能是一个bug或文档中的错误信息。据我所见,名称空间已正确导入,但前缀似乎应在本地声明

您可以使用以下命令:

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

var myNs1Local = myNs1 as Namespace

---
{

    body: {
        myNs1Local#Response: {
            outcome: 'ACCEPTED'
        }
    } write "application/xml"
}
这将产生预期的输出

{
  body: "<?xml version='1.0' encoding='UTF-8'?>\n<myNs1:Response xmlns:myNs1=\"http://namespaces/my1\">\n  <outcome>ACCEPTED</outcome>\n</myNs1:Response>" as String {class: "java.lang.String"}
} as Object {encoding: "UTF-8", mediaType: "*/*", mimeType: "*/*", class: "java.util.LinkedHashMap"}
{
正文:“\n\n接受\n”作为字符串{class:“java.lang.String”}
}作为对象{encoding:“UTF-8”,mediaType:“*/*”,mimeType:“*/*”,类:“java.util.LinkedHashMap”}

请注意,我使用的前缀是声明的变量(myNs1Local),但它仍然按照命名空间中引用的方式写入前缀。dwl

看起来像是一个bug,或者文档不正确。@aled,有什么解决方案吗?你有什么建议吗?或者我应该向MulesfotI提出一个支持案例,因为他看不到任何替代方案。我建议尽可能地报告这种行为,但要包括问题的细节,以便能够重现。