2017-01-11 4 views
0

初めてキャメルルートを使用すると、すべてのApacheドキュメントとsofの情報が非常に簡単になります....(これは、Apache CamelとCamel Salesforceコンポーネントはlibs)Camel Route onExcpetion/errorHandleがSalesforce Compotent例外をキャッチしない

class SFRouteClass extends RouteBuilder { 

    @Override 
    void configure() { 
     def camelRouteId 

     from("direct:moveFailedMessage") 
      .process { Exchange exchange -> 
       exchange.out 
      } 
     from('direct:sfe') 
      .onException(Exception.class) 
       .to('log:sfe?level=INFO&showHeaders=true&multiline=true') 
       .to('direct:moveFailedMessage') 
       .maximumRedeliveries(0) 
      .end() 
      .routeId('sfe') 
      .enrich('direct:salesforceCheckLeadByIDUserHashId'.toString(), new AggregationStrategy() { ..... } 
} 

org.apache.camel.component.salesforce.api.SalesforceException: Error {404:Not Found} executing {GET:https://.....} 
    at org.apache.camel.component.salesforce.internal.client.AbstractClientBase$1.onComplete(AbstractClientBase.java:176) 
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193) 
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:185) 
    at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:453) 
    at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:400) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:266) 
    at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1487) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1245) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:156) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:117) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:69) 
    at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:89) 
    at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:123) 
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.camel.component.salesforce.api.SalesforceException: {errors:[{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}],statusCode:404} 
    at org.apache.camel.component.salesforce.internal.client.DefaultRestClient.createRestException(DefaultRestClient.java:121) 
    at org.apache.camel.component.salesforce.internal.client.AbstractClientBase$1.onComplete(AbstractClientBase.java:175) 
    ... 16 common frames omitted 

エラーがない場合に機能します。私の問題は、onExceptionは決して引き起こさないということです。グローバルerrorHandlerを設定しようとしましたが、グローバルonExcpetionを作成しようとしました。エラーをキャッチするものは何もなく、私は理由を理解できません。

答えて

0

あなたはどちらか

  1. はそうルートはあなたが

  2. かに蹴ることができ、他のルート上に持っているエラーハンドラのスコープdirect:salesforceCheckLeadByIDUserHashIdから始まりルートには何のエラーハンドラを設定していないする必要がありますそのルートにもonExceptionを追加/移動します。

+0

ありがとう!はい、他のクラスには、呼び出されたクラスのルートがありました。最初にそれを処理する必要があります。 < –

0

doTry/doCatchを使ってみましたか?

from('direct:sfe') 
    .routeId('sfe') 
    .doTry() 
    .enrich('direct:salesforceCheckLeadByIDUserHashId'.toString(), new AggregationStrategy() { ..... } 
    .doCatch(Exception.class) 
       .to('log:sfe?level=INFO&showHeaders=true&multiline=true') 
       .to('direct:moveFailedMessage') 
       .maximumRedeliveries(0) // NOt needed as default is 0 
     .end() 
+0

私が間違っているとわかったのは、直接、salesforceCheckLeadByIDUserHashIdから直接処理しなければならなかったことです。ありがとう、そのパターンを念頭に置いています。 –

関連する問題