Разделять и группировать файлы с одинаковым пространством имен - PullRequest
0 голосов
/ 30 января 2019

Я работаю с приложением, которое обрабатывает XML-файл, который содержит большое количество заказов.Для управления количеством заказов я решил создать файлы, которые содержат каждые 1000 заказов.Для разделения файла я использовал перегруженный метод TokenizeXML, который наследует тег пространства имен, но это решение не решило мою проблему, поскольку TokenizeXML наследует пространство имен для каждого дочернего порядка, а не переносит весь файл.Я просто хочу знать, существует ли решение без использования пользовательской стратегии агрегирования.

Пример: input

<foo:namespace xmnls:foo="http://foo.com">
   <MessageInfo>
     <dateTime>20180127T0253-0500</dateTime>
     <id>20180127T0253-0500</id>
   </MessageInfo>
   <orders>
    <order>
       <name>source1</name>
    </order>
    <order>
       <name>source2</name>
    </order>
    <order>
       <name>source3</name>
    </order>
    <order>
       <name>source4</name>
    </order>
  </orders>
</foo:namespace>

Пример маршрута, который создает 2 файла с 2 заказами

from("{{input}}")
.split().tokenizeXML("order","*",2)
.process(setOutputName)
    .to("{{JmsOutput}}");

Результат:

Файл1

<foo:namespace xmnls:foo="http://foo.com">
   <MessageInfo>
     <dateTime>20180127T0253-0500</dateTime>
     <id>20180127T0253-0500</id>
   </MessageInfo>
   <orders>
     <order>
        <name>source1</name>
     </order>
    </orders>
</foo:namespace>



<foo:namespace xmnls:foo="http://foo.com">
   <MessageInfo>
     <dateTime>20180127T0253-0500</dateTime>
     <id>20180127T0253-0500</id>
   </MessageInfo>
   <orders>
     <order>
        <name>source2</name>
     </order>
    </orders>
</foo:namespace>

Ожидание:

Файл1

<foo:namespace xmnls:foo="http://foo.com">
   <MessageInfo>
     <dateTime>20180127T0253-0500</dateTime>
     <id>20180127T0253-0500</id>
   </MessageInfo>
   <orders>
     <order>
        <name>source1</name>
     </order>
     <order>
        <name>source2</name>
     </order>
   </orders>
</foo:namespace>
...