2017-02-07 10 views
0

同僚、私はchoicedoTryでキャメルルートを設定しようとしています。 私の問題はの2番目のwhen句です。 質問:choice節にdoTry工事を使用できますか?Camel:選択肢の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(); 

    } 

UPDATE

ルート.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(); 

    } 

UPDATE つ以上の変異体

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");*/ 
    } 

答えて

1

、ルートからエラー処理セパレート

onException (exception) 
    handled (true) 
    process failure processor 

そして、ちょうど私がbean`が、何も変わり `削除ルート

from ftp 
to validate 
+0

句、ありがとうございました。 – May12

0

ポイントは

.bean(messProcessor, "stopCamel") 

when()メソッドをサポート対象にはなりませんので、おそらくです。

注意:これはまだ普通のJavaです。対応するクラスが定義するオブジェクトのメソッドのみを呼び出すことができます。そしてコンパイラは、bean()を呼び出すと、whenを知らない何かが発生することを伝えます。

その答えは、元に戻って正確な結果のタイプbean()を調べて、おそらく別の呼び出しを行うことです。

+0

を持っています。 – May12

+0

答えは、それらの呼び出しで盲目的に遊ぶことではありません!答えは、これらの方法が何を意味し、**行うのかを習得することです。希望の結果を達成する方法を理解するために! – GhostCat

+0

ChostCat、私の場合は '.multicast()。parallelProcessing()'を使うことをお勧めしますか?私はXMLを検証し、すべてのXMLが有効であればdbにアップロードする必要があります。 – May12

関連する問題