Apache Camel Splitter不支持';无法正确分割xml文件

Apache Camel Splitter不支持';无法正确分割xml文件,xml,apache-camel,splitter,Xml,Apache Camel,Splitter,我有一个大的xml文件,希望使用ApacheCamel拆分器将其拆分为单个小文件。因此,我使用了示例的代码: <route> <from uri="file:inbox"/> <split streaming="true> <tokenize token="order" xml="true"/> <to uri="activemq:queue:order"/> </split> </route> 你的路线适合

我有一个大的xml文件,希望使用ApacheCamel拆分器将其拆分为单个小文件。因此,我使用了示例的代码:

<route>
<from uri="file:inbox"/>
<split streaming="true>
<tokenize token="order" xml="true"/>
<to uri="activemq:queue:order"/>
</split>
</route>


你的路线适合我

您是否绝对确定这就是您正在解析的XML?或者如果它是另一个,您是否检查它是否有效(所有打开和关闭标签等)

也许您可以在拆分之前记录正文:

<log message="body: ${body}"/>

编辑:

我使用以下路线进行测试:

<route>
    <from uri="direct:start" />
    <log message="body: ${body}"/>
    <split streaming="true">
        <tokenize token="order" xml="true"/>
        <log message="split: ${body}"/>
    </split>
</route>

调用路由:

String XML = "<orders><order><Parameter Name=\"CustomerID\" Value=\"701423\"/></order><order><Parameter Name=\"CustomerID\" Value=\"7011337\"/></order><order><Parameter Name=\"CustomerID\" Value=\"701789\"/></order></orders>";
ProducerTemplate template = main.getCamelTemplate();
template.sendBody("direct:start", XML);
stringxml=”“;
ProducerTemplate=main.getCamelTemplate();
sendBody(“direct:start”,XML);
这将打印以下输出:

INFO  body: <orders><order><Parameter Name="CustomerID" Value="701423"/></order><order><Parameter Name="CustomerID" Value="7011337"/></order><order><Parameter Name="CustomerID" Value="701789"/></order></orders>
INFO  split: <order><Parameter Name="CustomerID" Value="701423"/></order>
INFO  split: <order><Parameter Name="CustomerID" Value="7011337"/></order>
INFO  split: <order><Parameter Name="CustomerID" Value="701789"/></order>
信息体:
信息拆分:
信息拆分:
信息拆分:

请尝试以下xml模式的inheritNamespaceTagName选项


结果文件可能会相互覆盖。那么这应该是可行的:

<route>
    <from uri="file:inbox" />
        <split streaming="true>
            <tokenize token=" order " xml="true" />
            <to uri="file:outbox?fileName=${file:name.noext}-${exchangeId}.${file:name.ext}" />
        </split>
</route>


拆分器EIP模式为每个被拆分的元素生成一条新路由,如果您检查JMS队列(to uri=“activemq:queue:order”),则会为每个被拆分的元素生成一条消息。此外,对于拆分器中的每个迭代,您的主体将替换为当前拆分的元素,在这种形式下,完成拆分器后,您的主体将拥有最后一个拆分的元素

要在结束时获得包含所有拆分元素的主体,您需要一个聚合器EIP模式,该模式连接所有拆分的元素


要在拆分器完成时获取原始正文,可以将其保存在以前的exchange属性中,并在拆分器完成后从中还原。

是的,XML文件是正确的。。。我应该将“”粘贴到XML文件的顶部吗?如果是这样的话,它仍然不会运行。我又收到了一份上一份订单的文件。。。。运行代码时发生了什么?@okaisan1我使用SpringDSL和JavaDSL添加了拆分消息(xml)的测试用例详细信息说明
INFO  body: <orders><order><Parameter Name="CustomerID" Value="701423"/></order><order><Parameter Name="CustomerID" Value="7011337"/></order><order><Parameter Name="CustomerID" Value="701789"/></order></orders>
INFO  split: <order><Parameter Name="CustomerID" Value="701423"/></order>
INFO  split: <order><Parameter Name="CustomerID" Value="7011337"/></order>
INFO  split: <order><Parameter Name="CustomerID" Value="701789"/></order>
<route>
    <from uri="file:inbox" />
        <split streaming="true>
            <tokenize token=" order " xml="true" />
            <to uri="file:outbox?fileName=${file:name.noext}-${exchangeId}.${file:name.ext}" />
        </split>
</route>