私はカスタムプロセッサを使用して例外を処理しようとしていました。あなたが見ることができるように、私は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
と表示されています。