【问题标题】:Import xml namespace from custom Dataweave module从自定义 Dataweave 模块导入 xml 命名空间
【发布时间】:2021-03-07 07:38:22
【问题描述】:

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

我关注了Mulesoft的官方文档:https://docs.mulesoft.com/mule-runtime/4.3/dataweave-create-module

它声明:“当您将自定义模块导入另一个 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"
}

但我得到了这个错误:

前缀 myNs1 之前没有使用 ns 声明过

我在 Mule 4.3.0 上运行

【问题讨论】:

  • 它看起来像一个错误或文档不正确。
  • @aled,有什么解决方案吗?你有什么建议吗?或者我应该向 Mulesfot 提出支持案例
  • 我看不到任何替代方案。我建议尽可能报告此行为,但包括问题中的详细信息,以便可以复制。

标签: mule dataweave mule4


【解决方案1】:

正如 aled 所指出的,这可能是文档中的错误或错误信息。据我所知,命名空间已正确导入,但似乎应该在本地声明前缀。

你可以在下面使用:

%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"}

请注意,我用作前缀的是声明的变量(myNs1Local),但它仍然写入 Namespace.dwl 中引用的前缀

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多