Mule例外処理のパターン検証

前回記事にて、Muleの例外処理について説明しました。今回はどういうケースでどのようなエラー処理が実施されるのかパターン別の検証記事となります。

スポンサーリンク

ケース別例外処理

Muleの例外処理について、On Error ContinueとOn Error Propagateの組み合わでどういう経路でエラー処理が実施されるのかパターン別に検証してみましょう。

パターン1

Try内にOn Error ContinueとOn Error Propagateを配置し、Raise error Error handlingにOn Error ContinueとOn Error Propagateを配置。

パターン1のフロー

①Raise error :Any
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:Any
⑤On Error Propagate:Any

この場合のエラー処理の経路は①→②となり、Try内に配置したOn Error Continueでエラーが吸収される形になります。最終的にエラーにはなりません。

パターン1検証結果
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Continue in errorOther

パターン2

Try内にOn Error ContinueとOn Error Propagateを配置し、Raise error Error handlingにOn Error ContinueとOn Error Propagateを配置。
On Error ContinueのTypeをSTREAM_MAXIMUM_SIZE_EXCEEDEDに変更(Anyではキャッチしない例外)

パターン2のフロー

①Raise error :Any
②On Error Continue:STREAM_MAXIMUM_SIZE_EXCEEDED
③On Error Propagate:Any
④On Error Continue:Any
⑤On Error Propagate:Any

この場合のエラーの経路は①→③→④となります、一旦③のOn Error Propagateでキャッチされ、そこから流れたエラーが④で最終的にキャッチされ、吸収される形となります。

パターン2検証結果
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Propagate in try
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Continue in errorOther

パターン3

Try内にOn Error ContinueとOn Error Propagateを配置し、Raise error Error handlingにOn Error ContinueとOn Error Propagateを配置。
※パターン1の②と③の記載順を入れ替えたパターンになります

パターン3のフロー

①Try内のRaise error :Any
③On Error Propagate:Any
②On Error Continue:Any
④On Error Continue:Any
⑤On Error Propagate:Any

この場合は①→②→④とうい経路を辿ることになり、最終的に④のOn Error Continueエラーが吸収される形となるためエラーになりません。

この結果から、On Error ContinueとOn Error Propagateには優先権はなく、上から記載されたものから順番にキャッチされる模様であることがわかります。

パターン3検証結果
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Propagate in try
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Continue in errorOther

パターン4

Try内にOn Error ContinueとOn Error Propagateを配置し、Raise error Error handlingにOn Error ContinueとOn Error Propagateを配置。
Try外にコンポーネントエラー(ゼロ除算)が起こるよう配置します。

パターン4のフロー

①コンポーネントエラー(ゼロ除算)
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:Any
⑤On Error Propagate:Any

この場合のエラー処理の経路は①→④となり、ゼロ除算のエラーが④で吸収される形になり最終的にエラーになりません。

パターン4検証結果
org.mule.runtime.core.internal.processor.LoggerMessageProcessor: On Error Continue in errorOther

パターン5

Try内にOn Error ContinueとOn Error Propagateを配置し、Raise error Error handlingにOn Error ContinueとOn Error Propagateを配置します。

パターン5のフロー

①コンポーネントエラー(ゼロ除算)
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:STREAM_MAXIMUM_SIZE_EXCEEDED
⑤On Error Propagate:STREAM_MAXIMUM_SIZE_EXCEEDED

この場合は①でエラーが発生し、キャッチできる場所がないため、Server Errorが発生します。

パターン5検証結果

検証結果

  • On Error ContinueとOn Error Propagateには優先権はなく、上から記載されたものから順番にキャッチされる
  • Raise errorはTry内でしか使用できない
  • On Error Propagate内のSet Payloadは無効
  • どこにもキャッチされない例外が発生した場合はServer Errorになる
MuleSoft
スポンサーリンク

コメント