前回記事にて、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を配置。
①Raise error :Any
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:Any
⑤On Error Propagate:Any
この場合のエラー処理の経路は①→②となり、Try内に配置したOn Error Continueでエラーが吸収される形になります。最終的にエラーにはなりません。
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ではキャッチしない例外)
①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でキャッチされ、そこから流れたエラーが④で最終的にキャッチされ、吸収される形となります。
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の②と③の記載順を入れ替えたパターンになります
①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には優先権はなく、上から記載されたものから順番にキャッチされる模様であることがわかります。
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外にコンポーネントエラー(ゼロ除算)が起こるよう配置します。
①コンポーネントエラー(ゼロ除算)
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:Any
⑤On Error Propagate:Any
この場合のエラー処理の経路は①→④となり、ゼロ除算のエラーが④で吸収される形になり最終的にエラーになりません。
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を配置します。
①コンポーネントエラー(ゼロ除算)
②On Error Continue:Any
③On Error Propagate:Any
④On Error Continue:STREAM_MAXIMUM_SIZE_EXCEEDED
⑤On Error Propagate:STREAM_MAXIMUM_SIZE_EXCEEDED
この場合は①でエラーが発生し、キャッチできる場所がないため、Server Errorが発生します。
検証結果
- On Error ContinueとOn Error Propagateには優先権はなく、上から記載されたものから順番にキャッチされる
- Raise errorはTry内でしか使用できない
- On Error Propagate内のSet Payloadは無効
- どこにもキャッチされない例外が発生した場合はServer Errorになる
コメント