高效的基于内容的驼峰路由器:使用JavaDSL根据包含的标记将XML消息路由到正确的收件人
问题: 我需要处理不同的大型XML文件。每个文件都包含一个特定的节点,我可以使用它来识别传入的xml消息。根据节点/标记,应将邮件发送给专用收件人 不应将XML消息转换为字符串,然后使用contains进行检查,因为这将非常低效。相反,应该使用xpath来“探测”消息中预期节点的出现 解决方案应该基于camel的javadsl。守则:高效的基于内容的驼峰路由器:使用JavaDSL根据包含的标记将XML消息路由到正确的收件人,java,xpath,routes,apache-camel,dsl,Java,Xpath,Routes,Apache Camel,Dsl,问题: 我需要处理不同的大型XML文件。每个文件都包含一个特定的节点,我可以使用它来识别传入的xml消息。根据节点/标记,应将邮件发送给专用收件人 不应将XML消息转换为字符串,然后使用contains进行检查,因为这将非常低效。相反,应该使用xpath来“探测”消息中预期节点的出现 解决方案应该基于camel的javadsl。守则: from("queue:foo") .choice().xpath("//foo")).to("queue:bar") .otherwise().to("que
from("queue:foo")
.choice().xpath("//foo")).to("queue:bar")
.otherwise().to("queue:others");
中的建议不可编译。我使用的是Apache Camel 2.19.0。这编译:
from("queue:foo")
.choice().when(xpath("//foo"))
.to("queue:bar")
.otherwise()
.to("queue:others");
在构建谓词时,需要.when()来测试谓词表达式 谢谢。这似乎是可行的,但我也发现以下语法具有同样令人满意的效果:
from(“queue:foo”).choice().when().xpath(“//foo”).to(“queue:bar”).when().xpath(“//baz”).to(“queue:bazq”).other().to(“queue:others”)代码>这会起作用,但我认为最好将谓词保持在when()内,就像使用常规Java一样。如果需要构建稍微复杂一点的谓词,会发生什么?请注意,基于内容的路由器中的以下内容将不会编译:.choice().when().header(“foo”).isEqualTo(“bar”).to(“queue:bar”)
,但这会编译:choice().when(header(“foo”).isEqualTo(“queue:bar”)