Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效的基于内容的驼峰路由器:使用JavaDSL根据包含的标记将XML消息路由到正确的收件人_Java_Xpath_Routes_Apache Camel_Dsl - Fatal编程技术网

高效的基于内容的驼峰路由器:使用JavaDSL根据包含的标记将XML消息路由到正确的收件人

高效的基于内容的驼峰路由器:使用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

问题:

我需要处理不同的大型XML文件。每个文件都包含一个特定的节点,我可以使用它来识别传入的xml消息。根据节点/标记,应将邮件发送给专用收件人

不应将XML消息转换为字符串,然后使用contains进行检查,因为这将非常低效。相反,应该使用xpath来“探测”消息中预期节点的出现

解决方案应该基于camel的javadsl。守则:

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