Импортировать пространство имен xml из настраиваемого модуля Dataweave

Я пытаюсь создать собственный модуль 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


person Anurag Sharma    schedule 07.03.2021    source источник
comment
Похоже на ошибку или некорректная документация.   -  person aled    schedule 07.03.2021
comment
@aled, какое-нибудь решение для этого? вы можете что-нибудь предложить? или я должен обратиться в службу поддержки Mulesfot   -  person Anurag Sharma    schedule 07.03.2021
comment
Я не вижу альтернативы. Я рекомендую сообщить о таком поведении как о возможном, но, включая детали из вопроса, чтобы его можно было воспроизвести.   -  person aled    schedule 07.03.2021


Ответы (1)


Как отметил Алед, это могла быть ошибка или неверная информация в документации. Из того, что я вижу, пространства имен правильно импортированы, но кажется, что префиксы должны быть объявлены локально.

Вы можете использовать ниже:

%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.

person oim    schedule 08.03.2021