Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポートが終了しました。 このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。 標準サポートが適用されている最新バージョンの Mule 4 にアップグレードすることをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。 |
Mule アプリケーションでエラーが発生すると、Error Handler コンポーネントでエラーが HTTP:NOT_FOUND、DB:CONNECTIVITY、ANY (すべての Mule エラーのデフォルト) など、Mule エラーに一致した最初の On-Error コンポーネント (On Error Continue または On Error Propagate) 設定にルーティングされます。エラーについてエラー処理が設定されていない場合、アプリケーションはデフォルトのエラー処理プロセスに従います。
On-Error コンポーネントでは、オーナーに与える影響で違いがあります。つまり、定義されている Flow または Try スコープです。
実行しますが、含む側のスコープ (たとえば、エラーが発生した Try スコープが含まれるフロー) またはエラーが発生したフローに対するフロー参照が含まれる外部フローなど、上のレベルにエラーを伝播します。 エラーによってオーナーの実行が中断され、その上のレベルに伝播するため、そのレベルで失敗となります。さらに、オーナーが処理するトランザクションがロールバックされます。ただし、別のコンポーネント (On Error Propagate を所有しないコンポーネント) でトランザクションが作成された場合は、トランザクションはロールバックされません。
実行し、オーナーが実行を正常に完了したかのように、実行の結果をそのオーナーの結果として使用します。オーナーが処理するトランザクションはコミットされます。ただし、別のコンポーネント (On Error Propagate を所有しないコンポーネント) でトランザクションが作成された場合は、トランザクションはコミットされません。
Mule アプリケーションのデザイン中にエラーの可能性を識別して処理できるように、On-Error コンポーネントではアプリケーションで設定される Runtime Engine および操作によってスローされる可能性があるエラーをリストしています。処理するエラーを選択できます。
照合: On-Error コンポーネントでは選択したエラー種別に基づいて照合を実行できます。選択可能なエラー種別のリストは、On-Error コンポーネントが適用されるフローまたはスコープ内のモジュールおよびコネクタ操作に応じて異なります。また、ランタイムでスローされる可能性がある EXPRESSION
エラーと STREAM_MAXIMUM_SIZE_EXCEEDED
エラーもリストしています。
式の照合 (より高度なユースケース向け):
On-Error コンポーネントの When 項目で定義した when
条件に基づいてエラー照合を実行できます。たとえば、コンポーネントを「fatal (致命的)」という語が含まれるエラーメッセージがある致命的なエラーにマップすることができます。
UI での When 項目の設定: error.cause.message contains "fatal"
XML 設定の例:
<on-error-continue
enableNotifications="true" logException="true"
type="ANY"
when='error.cause.message contains "fatal"'/>
照合条件は、On-Error コンポーネントがエラーハンドラーに存在する順番で連続的に評価されます。たとえば VALIDATION:NOT_NULL
をある方法で処理し、その他のすべてのエラーを別の方法で処理する場合は、残りのエラーを捕捉するコンポーネント (2 つ目の On-Error コンポーネントで ANY
として識別) の前に、そのエラーの On-Error コンポーネント設定を指定します。明示的に照合しないエラーまたは ANY を使用して捕捉するエラーでは、デフォルトのエラー処理が実行されます。
次のエラーハンドラーは、VALIDATION:NOT_NULL
エラーに対して { "messageANY" : "Some other error" }
ではなく { "MyError": "value was expected to be null" }
を生成するように設定されています。. 文字列 value was expected to be null
は VALIDATION:NOT_NULL
エラーの説明です。Is Null コンポーネントがこのエラーをスローできます。
Is Null は検証モジュールに属しています。
<error-handler >
<on-error-continue enableNotifications="true"
logException="true"
type="VALIDATION:NOT_NULL">
<ee:transform >
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
MyError : error.description as String
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</on-error-continue>
<on-error-continue
enableNotifications="true"
logException="true"
type="ANY">
<ee:transform>
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
"messageANY" : "Some other error"
}
]]></ee:set-payload>
</ee:message>
</ee:transform>
</on-error-continue>
</error-handler>
デフォルトでは、On-Error コンポーネントによって一致するエラーも記録され、エラーが発生した場合のエラーの通知も有効になります。これらの設定は XML を使用して無効にできます。
ほとんどの場合、On Error コンポーネントはスコープに似た Error Handler コンポーネント内で設定します。各フローには組み込みの Error Handler が 1 つだけ含まれますが、Error Handler には必要に応じて任意の数の On-Error コンポーネントを含めることができ、各 On-Error コンポーネントには Logger など、On-Error コンポーネントによって捕捉されたエラーを処理するコンポーネントを任意の数含めることができます。
Error Handler コンポーネントは Flow コンポーネントおよび Try コンポーネントに組み込まれているため、On-Error コンポーネントをフローのスコープ内または Try コンポーネント内で発生したエラーに使用できます。例は、「On-Error コンポーネントを使用したメッセージングエラーの処理」を参照してください。
On-Error コンポーネントは、Flow コンポーネントまたは Try スコープから参照される個別の Error Handler 設定で使用することもできます (「グローバルエラーハンドラーの参照」を参照)。
フロー内の組み込み Error Handler コンポーネント内部で、エラー種別と式を照合する On Error コンポーネントを 1 つ以上セットアップできます。次の例は、任意のフロー内で発生したエラーを処理する一般的な構造を示しています。1 つのフローでは、Error Handler コンポーネントの On Error Continue (on-error-continue
) を使用します。もう 1 つのフローでは On Error Propagate (on-error-propagate
) を使用します。
<flow name="catch">
<!-- flow logic -->
<error-handler>
<on-error-continue>
<!-- error handling logic -->
</on-error-continue>
</error-handler>
</flow>
<flow name="rollback">
<!-- flow logic -->
<error-handler>
<on-error-propagate>
<!-- error handling logic -->
</on-error-propagate>
</error-handler>
</flow>
例は、「On-Error コンポーネントを使用したメッセージングエラーの処理」を参照してください。
グローバルに公開してフローおよび Try スコープで参照することでエラーハンドラーを共有できるのと同じように、On-Error コンポーネントを再利用することもできます。On-Error コンポーネントをグローバルに定義して名前を付けてから、Error Handler コンポーネントから参照できます。
<on-error-propagate name="sharedPropagateHandler">
<logger message="An unhandled error has occurred."/>
</on-error-propagate>
<on-error-continue type="EXPRESSION" name="sharedContinueHandler">
<logger message="An expression failed to evaluate."/>
</on-error-continue>
<error-handler name="reusingHandlers">
<on-error ref="sharedContinueHandler"/>
<on-error-continue type="ROUTING">
<logger message="An expression failed to evaluate."/>
</on-error-continue>
<on-error ref="sharedPropagateHandler"/>
</error-handler>
他の再利用の例は、「グローバルエラーハンドラーの参照」を参照してください。