キャメルでは、私のルートに例外がスローされた場合、それを例えばドメイン例外に変換して、テストのためにmock:errors
エンドポイントに渡したいと思います。しかし、私はそれをすることができないようです。Camel:例外を別のクラスに翻訳する
errorHandler(deadLetterChannel("mock:errors").maximumRedeliveries(0));
// even tried this alternative while debugging the processor below
// to be sure it is not rethrown
onException(Exception.class).process((Exchange e) -> {
System.out.println(e.getException()); // breakpoint here
});
from("direct:createRequest")
.onException(Exception.class)
.handled(true)
.process(toInvalidRequestException)
.end()
.unmarshal().json(Jackson, Request.class)
.bean(validateRequest);
-------------
private static Processor toInvalidRequestException = exchange -> {
Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
throw new InvalidRequestException(format("Barcode request is not valid or has wrong format: %s",
getRootCauseMessage(e)), e);
};
上記のルートでは、任意の例外(たとえば、検証例外、またはJacksonの解析例外)がスローされる可能性があります。私はonException節を使ってそれを傍受し、それをメッセージの詳細でInvalidRequestExceptionに変換したいと思う。これは動作しますが、この例外が実際にmock:errors
エンドポイントを使用してテストでスローされたと主張したいと思います。ただし、例外が変換プロセッサから伝播されないため、そのエンドポイントは常に空です。
handled(true)
とcontinued(true)
と組み合わせて試しましたが、わかりません。
をしかし、私のコードは、同じ作品は、例外がありますが、新しい例外はErrorHandlerのこのsubrouteからと 'モックに再スローされていません。errors'終点。 – redhead
私がこのように扱ったとしても(真)、「疑似:エラー」は空です。私は質問を更新します。 – redhead
これは、 'onException'が' errorHandler'の定義をオーバーライドしているからです。 –