使用相同的名称空间分割和分组文件

时间:2019-01-30 11:39:41

标签: java split apache-camel tokenize

我正在处理一个处理包含大量订单的xml文件的应用程序。为了管理订单量,我决定创建一个包含每1000个订单的文件。对于拆分文件,我使用了继承名称空间标签的重载方法TokenizeXML,但是此解决方案无法解决我的问题,因为TokenizeXML会在每个子订单上继承名称空间,而不是包装整个文件。我只是想知道是否存在不使用自定义聚合策略的解决方案。

示例:输入

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

期望:

File1

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

0 个答案:

没有答案