Apache camel apachecamel:我可以在条件选择语句的when部分中放置多个语句吗?

Apache camel apachecamel:我可以在条件选择语句的when部分中放置多个语句吗?,apache-camel,Apache Camel,我希望获得以下类型的路由: 带有XML正文的HTTP POST消息 我存储XML主体的一些参数 消息被路由到外部端点 外部终结点(外部服务器)答复 ->现在,我想检查来自外部端点的回复是否是HTTP 200 OK,其中包含一个等于SUCCESS的XML参数。 ->如果是这样,那么我想使用一些存储的参数来构造一个新的HTTP消息(这次method=PUT),并将其发送到外部端点 我目前遇到的问题如下: .choice() .when(simple("${in.headers.CamelHttpR

我希望获得以下类型的路由:

  • 带有XML正文的HTTP POST消息
  • 我存储XML主体的一些参数
  • 消息被路由到外部端点
  • 外部终结点(外部服务器)答复
  • ->现在,我想检查来自外部端点的回复是否是HTTP 200 OK,其中包含一个等于SUCCESS的XML参数。 ->如果是这样,那么我想使用一些存储的参数来构造一个新的HTTP消息(这次method=PUT),并将其发送到外部端点

    我目前遇到的问题如下:

    .choice()
     .when(simple("${in.headers.CamelHttpResponseCode} == 200"))
       // now I want do a few things, eg: check also the XML body via xpath
       // and change the message to be sent out (change Method to PUT, ...)
        .to("http://myserver.com")
     .otherwise()
       // if no 200 OK, I want the route to be stopped ... not sure how ?
    .end()
    
    问:如果HTTP响应代码为200 OK,您知道如何添加这些额外语句吗?看起来when不允许我添加额外的语句。。。 (我的EclipseIDE中有一个错误)

    提前谢谢

    注意:如果200个OK匹配到一个“新端点”,我是否必须路由消息,然后使用这个新端点创建一个新的from路由? 例如:


    在后一种情况下,我应该如何准确地定义这个“newendpoint”?

    是的,在.when()和.other()之间可以有多个语句,并且可以始终调用.endChoice()来显式结束每个条件块


    对于您的另一个问题,您可以使用将多个路由链接在一起,等等。

    在编程语言DSL(如Java)中,您可以一起构建谓词。几年前,我在以下网站上发布了一篇关于此的博客:

    例如,有两个谓词

    Predicate p1 = header("hl7.msh.messageType").isEqualTo("ORM"):
    Predicate p2 = header("hl7.msh.triggerEvent").isEqualTo("001");
    
    您可以使用and或or将它们链接在一起

    Predicate isOrm = PredicateBuilder.and(p1, p2);
    
    然后可以在路线中使用isOrm

    from("hl7listener")
        .unmarshal(hl7format)
        .choice()
            .when(isOrm).beanRef("hl7handler", "handleORM")
            .otherwise().beanRef("hl7handler", "badMessage")
        .end()
        .marshal(hl7format);
    

    谢谢我以前一定犯过语法错误,我确实可以在.when()和.otherse()之间输入多个语句。任何原因导致
    Predicate isOrm=PredicateBuilder.and(header(“hl7.msh.messageType”).isEqualTo(“ORM”)、header(“hl7.msh.triggerEvent”).isEqualTo(“001”)不起作用?关于如何以及何时对其进行评估?有没有办法在蓝图中使用此PredicateBuilder?
    
    from("hl7listener")
        .unmarshal(hl7format)
        .choice()
            .when(isOrm).beanRef("hl7handler", "handleORM")
            .otherwise().beanRef("hl7handler", "badMessage")
        .end()
        .marshal(hl7format);