Apache Camel Splitter不支持';无法正确分割xml文件
我有一个大的xml文件,希望使用ApacheCamel拆分器将其拆分为单个小文件。因此,我使用了示例的代码: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> 你的路线适合
<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>