Dataweave - Попытка написать END_DOCUMENT, когда документ не имеет корня
У меня есть приложение /Java ArrayList. Содержит элементы XML в формате String. Я хочу добавить к основному / корневому узлу с Dataweave 2:
%dw 2.0
output application/xml
---
shops: write(vars.shop, "application/xml")
Но это возвращает:
Caused by:
javax.xml.stream.XMLStreamException: Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document)
Как я могу решить это? Я пытался с приложением / Java, но все еще не удается, проблема в методе write(), пытаясь преобразовать массив в XML.
2 ответа
Решение
Что имеет vars.shop? Чаще всего для построения XML вам необходимо использовать функцию динамического объекта.
%dw 2.0
output application/xml
ns ns0 http://example/catalog/2002-13-23
var shops = ["data example","data example2","data example123","data example345","data example56"]
---
{
ns0#shops @("shops-id": "demo"): {
(shops map (shopName) -> {
ns0#shop: shopName
})
}
}
Этот скрипт выводит
<?xml version='1.0' encoding='UTF-8'?>
<ns0:shops xmlns:ns0="http://example/catalog/2002-13-23" shops-id="demo">
<ns0:shop>data example</ns0:shop>
<ns0:shop>data example2</ns0:shop>
<ns0:shop>data example123</ns0:shop>
<ns0:shop>data example345</ns0:shop>
<ns0:shop>data example56</ns0:shop>
</ns0:shops>
Не могли бы вы попробовать это
%dw 2.0
output application/xml
---
shops: read(vars.shop, "application/xml")