У меня есть сценарий использования, когда мне нужно взять существующий документ XML и дополнить его из базы данных для процесса интеграции.
Я начинаю с чего-то вроде:
<parent>
<child>
<data>A</data>
</child>
<child>
<data>B</data>
</child>
<parentData>
<data/>
</parentData>
</parent>
То, что я пытаюсь сделать, это добавить дерево <moreData .../>
к каждому из child
элементов.
Я мог бы просто написать собственный bean-компонент, который делает все, но в нем нет правильного подхода,Я подумал об использовании разделителя на основе xpath для child, за которым следует content-enricher, который позволит мне получить дополнительные данные, но я не вижу, как потом собрать все заново.
Atв данный момент я думаю, что мне нужно использовать цикл, но это тоже кажется неуклюжим и потребует настраиваемой стратегии агрегирования для обогащения контента.
from("direct:a")
.loop().xpath("count( parent/child )", Integer.class )
.setHeader("Key")
.xpath( "parent/child[function:properties('CamelLoopIndex')]/data", String.class )
.enrich("sql:SELECT xmldata FROM dataTable WHERE key = :#Key?dataSource=myDS",
new MyCustomAggregationStrategy() )
Это должно происходить каждый день вМир верблюда, но я не могу найти примеров того, как это сделать.
Если бы я делал это в пользовательском бине, я бы получил xpath для элемента child
, а затем прошел бы черезнода, выполняющая запрос и присоединяющая результат как новый дочерний элемент к узлу.Я просто не могу понять, как сделать это "красиво" в Camel.
Любые идеи или подсказки были бы великолепны!Спасибо!