骆驼:如何在“选择时间”中完成所有“时间”

Hon*_*nAn 1 apache-camel content-based-retrieval

我需要在 Apache Camel 路线中询问操作员“选择时间”的问题。在以下示例中,如果我有两个具有 1, 2 值的 soap-env:Order 元素,那么我想创建两个名为 output_1.xml 和 output_2.xml 的 xml 文件。但是,代码只能创建一个文件output_1.xml。谁能给我任何想法或提示?谢谢你的帮助。

    public void configure() {
    ...  
    from("direct:a")
        .choice()
            .when(ns.xpath("//soap-env:Envelope//soap-env:Order='1'"))
                .to("file://data?fileName=output_1.xml")
            .when(ns.xpath("//soap-env:Envelope//soap-env:Order='2'"))
                .to("file://data?fileName=output_2.xml")
            .when(ns.xpath("//soap-env:Envelope//soap-env:Order='3'"))
                .to("file://data?fileName=output_3.xml")
}
Run Code Online (Sandbox Code Playgroud)

Ral*_*alf 6

我的理解是基于内容的路由器实现了“if - else if - else”语义,这意味着只要一个测试评估为真,其余的测试就会被跳过。如果要为每个返回 true 的情况创建文件,则必须将路由更改为如下所示:

from("direct:a")
    .choice()
       .when(ns.xpath("//soap-env:Envelope//soap-env:Order='1'"))
           .to("file://data?fileName=output_1.xml")
    .end()
    .choice()
       .when(ns.xpath("//soap-env:Envelope//soap-env:Order='2'"))
           .to("file://data?fileName=output_2.xml")
    .end()
    .choice()
        .when(ns.xpath("//soap-env:Envelope//soap-env:Order='3'"))
           .to("file://data?fileName=output_3.xml")
    .end()
Run Code Online (Sandbox Code Playgroud)