java - Camel : doTry in the Choice clause

标签 java apache-camel

同事们,我正在尝试使用 choicedoTry 配置 Camel 路由。 我的问题是无法解析第二个 when 子句上的方法“when”。 问题:是否可以在 choice 子句中使用 doTry 构造?

路线如下:

public void configure() {
        from("sftp://.....").choice()
            .when(header("CamelFileName").contains("XML P")).log("Validate ${file:name}").bean(new MessProcessor(), "logInputMessDetails")
             .doTry().
                    to("validator:file:C:\\Users...\\xsds\\p.xsd").log("${file:name} is valid")
             .doCatch(ValidationException.class)
                 .log("XML P is not valid")
                 .to("file:sftp-inbound\\data-invalid\\" + header("CamelFileParent").toString())
                 .bean(messProcessor, "stopCamel")
/*The problem is here*/ .when(header("CamelFileName").contains("XML X")).log("Validate ${file:name}").bean(new MessProcessor(), "logInputMessDetails").
            doTry().to("validator:file:C:\\Users\....\xsds\\position.xsd").log("${file:name} is valid").
            doCatch(ValidationException.class).log("XML X is not valid").to("file:sftp-inbound\\data-invalid\\" + header("CamelFileParent").toString()).
            bean(messProcessor, "stopCamel")
            .end();

    }

更新

删除.bean(messProcessor, "stopCamel")后的路由:

public void configure() {
        from("sftp://.....").choice()
            .when(header("CamelFileName").contains("XML P")).log("Validate ${file:name}").bean(new MessProcessor(), "logInputMessDetails")
             .doTry().
                    to("validator:file:C:\\Users...\\xsds\\p.xsd").log("${file:name} is valid")
             .doCatch(ValidationException.class)
                 .log("XML P is not valid")
                 .to("file:sftp-inbound\\data-invalid\\" + header("CamelFileParent").toString())
                 .end;
/*The problem is still here*/ .when(header("CamelFileName").contains("XML X")).log("Validate ${file:name}").bean(new MessProcessor(), "logInputMessDetails").
            doTry().to("validator:file:C:\\Users\....\xsds\\position.xsd").log("${file:name} is valid").
            doCatch(ValidationException.class).log("XML X is not valid").to("file:sftp-inbound\\data-invalid\\" + header("CamelFileParent").toString()).
            bean(messProcessor, "stopCamel")
            .end();

    }

更新 另一种变体

public void configure() {

        from("sftp:...}")

                .choice()
                .when(header("CamelFileName").contains("XML_POS")).log("Validate ${file:name}")
                .to("validator:file:C:\\pos.xsd").log("${file:name} valid")
                .when(header("CamelFileName").contains("XML_SETS")).log("Validate ${file:name}")
                 .to("validator:file:C:\\sets.xsd").log("${file:name} valid").end()
               .onException(Exception.class)
               .process(new FailureResponseProcessor())
               .handled(true);

            /*to("file:sftp-inbound");*/
    }

最佳答案

将错误处理与路由分开,

 onException (exception)
   handled (true)
   process failure processor

然后就有路线

from ftp
 to validate

关于java - Camel : doTry in the Choice clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42083421/

相关文章:

Linux 上的 JavaFX 显示 "Graphics Device initialization failed for : es2, sw"

java - Camel Hystrix EIP - IgnoreExceptions 以防止调用 Fallback

java - 从Camel文件组件开始

java - Camel cxf 代理不适用于 http 端点

java - 维护多线程 Apache Camel 应用程序中的顺序

java - Java 中的 SocketChannel 发送数据,但没有到达目标应用程序

java - Hibernate-NamedSqlQuery UserType 作为 ReturnType

java - 无法打开 Hibernate Session 进行交易;嵌套异常是 org.hibernate.exception.JDBCConnectionException : Could not open connection

java - 无法检查来自 SQLite 的有效登录

java - 指定具有多个上下文的 Camel 上下文关闭顺序