2017-04-20 7 views
0

私はカスタムプロセッサを使用して例外を処理しようとしていました。あなたが見ることができるように、私はDefaultErrorHandlerの振る舞いを模倣しようとしています上記のApache Camelを模倣DefaultErrorHandler

public class ExceptionProcessor implements Processor 
{ 
    private static final Logger LOGGER = ExLoggerFactory.getLogger(ExceptionProcessor.class); 

    @Override 
    public void process(Exchange exchange) throws Exception 
    { 
     Exception ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class); 
     Object messageHistroy = exchange.getProperty(Exchange.MESSAGE_HISTORY, Object.class); 

     LOGGER.error("\n\nMessage History\n---------------------------------------------------------------------------------------------------------------------------------------\n" 
        + messageHistroy 
        +"\n\nStacktrace\n---------------------------------------------------------------------------------------------------------------------------------------" 
        ); 
     ex.printStackTrace(); 
    } 
} 

:それは最初のメッセージの履歴を表示します

onException(Exception.class) 
    .maximumRedeliveries(0) 
    .process(exceptionProcessor) 
    .handled(true) 
    .to("file:C:\\Mahesh\\delete\\failedrequests"); 

マイ例外プロセッサは次のようになります。私のルートビルダーは、このような何かを見てスタックトレース。

私のExceptionProcessorは、DefaultErrorHandlerの場合と同じ方法でメッセージ履歴を出力しません。このようなDefaultErrorHandler印刷それをこのように私ExceptionProcessorプリントを一方

Message History 
--------------------------------------------------------------------------------------------------------------------------------------- 
RouteId    ProcessorId   Processor                  Elapsed (ms) 
[route1   ] [route1   ] [file://C:%5CMahesh%5Cdelete%5Ccamelsource          ] [  121] 
[route1   ] [process1   ] [[email protected]               ] [  120] 
[     ] [to1    ] [file:C:\Mahesh\delete\badworkitems           ] [  98] 

Message History 
--------------------------------------------------------------------------------------------------------------------------------------- 
[DefaultMessageHistory[routeId=route1, node=process2], DefaultMessageHistory[routeId=null, node=process1]] 

Q.私のプロセッサは、プロセッサとの第3行の第3列を取得することができないと思われますエンドポイントまでどうやってこれを取得するのですか?あなたが見ることができるように

o.a.camel.processor.DefaultErrorHandler : Failed delivery for (MessageId: ID-01HW865638-58603-1492677082431-0-7 on ExchangeId: ID-01HW865638-58603-1492677082431-0-8). Exhausted after delivery attempt: 1 caught: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('"' (code 34)): was expecting comma to separate OBJECT entries 
at [Source: C:\Mahesh\delete\camelsource\file1.json; line: 4, column: 3]. Processed by failure processor: FatalFallbackErrorHandler[Channel[sendTo(file://C:%5CMahesh%5Cdelete%5Cbadworkitems)]] 

Q.は、DefaultFaultHandlerもメッセージID、交換ID、ソースファイル名とsend-を印刷することができる。また、

は、メッセージの履歴を印刷する前に、DefaultErrorHandlerも、この印刷しますフォルダ名を指定します。私はこの情報をどこから得るのだろうかと思っていました。ソースファイル名については、すべてExchange.FILE_*プロパティを試しましたが、すべてがnullと表示されています。

答えて

0

Camelのソースコードを見て、その情報をどのように出力するか、アクセス権のあるメッセージ履歴を使用します。ソースコードはgithubで見つけることができます。

https://github.com/apache/camel/