・MCD(MuleSoft Certified Developer)の勉強をした際に、フローのエラー制御でつまずいたので、メモです。
・試験では、フローが書いてあり、何が出力されるのか問う問題が多数ありました。(2021/5/25時点)
定義
・エラーが発生したら、(同じフロー内の、)後続処理は実行しない。
・成功した場合、Payloadが出力される。(ステータスコードは200)
・失敗した場合、Errorオブジェクトが出力される。
・Errorメッセージは、上書くことが出来る。
・Errorは以下3種類ある。
①アプリ
②フロー
③プロセス
・フローにエラーが無い場合など、アプリのエラーが実行される。
(つまり余り実行されるケースはない。)
・On Error Continueは、エラーであっても、OK(成功)を返す。
・On Error Propagateは、エラーをエラーオブジェクトで返す。
<問題>フローの結果、出力される値、後続処理の実行有無に関して。
パターン①
・③でエラーが発生した際に、後続処理は実行されない。
・Subフロー内のエラースコープは、On Error Propagateなので、呼び出し元のフローに、NGを返す。
・②はNGを受け取り、⑤の後続処理を実行しない。
・Mainフロー内のエラースコープは、On Error Propagateなので、NGと、エラーメッセージを返す。
→結論
結果:NG
返却する値:③のエラーメッセージ
パターン②
今度は、MainフローがOn Error Continueのケース。
以下、③でエラー発生した場合の場合の出力結果
・③でエラーが発生した際に、後続処理は実行されない。
・Subフロー内のエラースコープは、On Error Propagateなので、呼び出し元のフローに、NGを返す。
・②はNGを受け取り、⑤の後続処理を実行しない。
・Mainフロー内のエラースコープは、On Error Continueなので、OKと、Payloadを返す。
→結論
結果:OK
返却する値:Payload
パターン③
今度は、SubフローもOn Error Continueのケース。
以下、③でエラー発生した場合の場合の出力結果
・③でエラーが発生した際に、後続処理は実行されない。
・Subフロー内のエラースコープは、On Error Continueなので、呼び出し元のフローに、OKを返す。
・②はOKを受け取ったため、⑤の後続処理を実行する。
・Mainフロー内のエラースコープは、On Error Continueなので、OKと、Payloadを返す。
→結論
結果:OK
返却する値:Payload
パターン④
以下、③でエラー発生した場合の場合の出力結果
※考慮事項。エラーの返却時のBodyが、Payloadでうわがかれている。
< http:error-response >
< http: body>< ![CDATA[#payload]> < /http: body>
< /http:error-response >
・③でエラーが発生した際に、後続処理は実行されない。
・Subフロー内のエラースコープは、On Error Propagateなので、呼び出し元のフローに、NGを返す。
・②はNGを受け取り、⑤の後続処理を実行しない。
・Mainフロー内のエラースコープは、On Error Propagateなので、NGを返す。
通常エラーオブジェクトを返すが、うわがかれているので、Payloadが返る。
→結論
結果:NG
返却する値:Payload
参考
https://qiita.com/ykibe/items/7788e75ead31eeeb8833
https://docs.mulesoft.com/jp/mule-runtime/4.3/error-handling
https://qiita.com/nori83/items/7a16de3b181384b10976