1

スプリッタの後、メッセージを処理する際に例外が発生します。私はその例外を処理し、共通チャネルに、例外を生成したそのメッセージの相関IDとそのエラーを示す特別なヘッダーを持つ新しいメッセージを送りたいと思います。例外フローの現在の相関IDを保持する新しいメッセージを案内する方法

私はそれをこの方法を試した:

@Bean 
public IntegrationFlow socialMediaErrorFlow() { 
    return IntegrationFlows.from("socialMediaErrorChannel") 
      .wireTap(sf -> sf.handle("errorService", "handleException")) 
      .handle((p, h) -> MessageBuilder.withPayload(p).copyHeaders(h).setHeader("ERROR", true).build()) 
      .channel("directChannel_2") 
      .get(); 
} 

しかしアグリゲータ戻り、このエラー:

MessageHandlingException: error occurred in message handler [org.springframework.integration.dsl.AggregatorSpec$InternalAggregatingMessageHandler#0]; nested exception is java.lang.IllegalStateException: Null correlation not allowed. Maybe the CorrelationStrategy is failing? 

Iは、メッセージヘッダーの相関IDをコピーすることはできません。

誰かが間違っていると知っていますか?前もって感謝します。

答えて

1

エラーチャネルに到着するメッセージはErrorMessageです。その​​は(通常)MessagingExceptionです。それは、順番に、failedMessageプロパティを持っています。彼らはすでにそこfailedMessageであるので、あなたはヘッダをコピーする必要はありません

.<MessagingException>handle((p, h) -> MessageBuilder.fromMessage(p.getFailedMessage()).setHeader("ERROR", true).build()) 

:あなたが必要なもの

はこのようなものです。 ErrorMessageは、例外を処理するだけなので、ヘッダーについては気にしません(それはできません)。

関連する問題