Raise Error コンポーネント

このコアコンポーネントは、障害が発生したかのように Mule エラーを生成し、その説明および種別をカスタマイズできます。

このコンポーネントは、次のエラーを生成するためにのみ使用します。

  • MULE:SECURITY​、​MULE:CONNECTIVITY​ などのコアランタイムエラー。

  • カスタムエラー種別。

別のコネクタや ​FILE:FILE_NOT_FOUND​ や ​JSON:INVALID_SCHEMA​ などのモジュールからエラーを発生させることはできません。コネクタの既存の名前空間を使用することはできません。

エラー生成設定

項目 説明

説明

String (文字列) または DataWeave 式

エラーの説明を指定します。

description="Error description message."

String (文字列)

エラーの種別を指定します。

type="CUSTOM:CUSTOM_ERROR"

コアランタイムエラー生成種別

コアランタイムエラー種別では、暗黙的な名前空間および識別子を使用する必要があり、エラーの説明メッセージのみカスタマイズできます。次に例を示します。

<raise-error type="MULE:CONNECTIVITY" description="Error description message"/>

カスタムエラー生成種別

カスタムエラー種別では、新しい名前空間を宣言します。エラー種別の名前空間は、エラーの起源を特定するのに役立ちます。次に例を示します。

<raise-error type="ORDER:INVALID_DATA" description="Email is invalid. Cannot complete transaction"/>

コネクタまたはモジュールでは定義済みの名前空間があるため、これらから既存の名前空間を使用することはできません。 raise-error​ で使用することでカスタム名前空間を宣言した場合は、他の ​raise-error​ コンポーネントおよびカスタム種別で使用できます。

次の運転教習プラットフォームの例では、ユーザーが運転可能な 16 歳以上であることを確認します。ユーザーが 16 歳未満の年齢を入力すると、フローで ​PRECONDITIONS:INCORRECT_AGE​ エラーが生成されます。

  • Choice Router コンポーネントにより、条件処理がフローに追加されます。

  • 要求で送信された age パラメーターが 16 ​http://localhost:8081/test?age=15​ 未満の場合、Raise Error コンポーネントでエラー種別 ​PRECONDITIONS:INCORRECT_AGE​ と説明 ​Minimum age of 16 required to drive​ が生成されます。

  • 次に、On-Error Continue コンポーネントでエラー ​PRECONDITIONS:INCORRECT_AGE​ の種別が照合され、そのスコープ内で Logger コンポーネントが実行されます。Logger コンポーネントによってエラーメッセージ ​Minimum age of 16 required to drive​ が記録されます。

  • 要求 ​http://localhost:8081/test?age=17​ の age パラメーターが 16 より大きい場合、Logger コンポーネントでデフォルトのメッセージ「​User age above 16 years.​」が返されます。​` Allowed to drive`​ が返されます。

  • 要求 ​http://localhost:8081/test​ で age パラメーターが渡されない場合、式 ​#[message.attributes.queryParams.age < 16]​ を評価しようとしたときに Choice コンポーネントで自動的に ​MULE:EXPRESSION​ エラーが生成されます。これは、要求で age パラメーターが指定されなかったことで、その値が null になっているためです。

  • 次に、On-Error Continue コンポーネントでエラー ​MULE:EXPRESSION​ の種別が照合され、そのスコープ内で Logger コンポーネントが実行されます。Logger コンポーネントによってメッセージ ​The parameter age is missing or invalid​ が返されます。

フローの XML 設定:

<http:listener-config name="HTTP_Listener_config">
  <http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<flow name="raise-error-example-flow">
  <http:listener config-ref="HTTP_Listener_config" path="/test"/>
  <choice>
    <when expression="#[message.attributes.queryParams.age &lt; 16]">
      <raise-error type="PRECONDITIONS:INCORRECT_AGE" description="Minimum age of 16 required to drive" />
    </when>
    <otherwise >
      <logger level="INFO" message="User age above 16 years. Allowed to drive"/>
    </otherwise>
  </choice>
  <error-handler >
    <on-error-continue enableNotifications="true" logException="true" type="PRECONDITIONS:INCORRECT_AGE">
      <logger level="INFO" message="Minimum age to drive is 16 years old"/>
    </on-error-continue>
    <on-error-continue enableNotifications="true" logException="true"  type="MULE:EXPRESSION">
      <logger level="INFO" message="The parameter age is missing or invalid"/>
    </on-error-continue>
  </error-handler>
</flow>

https://unsecurebank.com/balance​ に対して要求を行ったときに勘定残高を返す API を考えます。
次の例では、この API に対する要求を行って値を ​balance​ 変数に保存し、​payload.amount​ と比較して操作が可能かどうかを判断します。
振込金額が利用可能残高を超えると Choice Router で ​ACCOUNT:INSUFFICIENT_FUNDS​ エラーが生成され、振込が行われないようにします。さらに、失敗の詳細が含まれる式を提供することで、動的な説明が生成されます。

フローの XML 設定:

<flow name="raise-error-example-flow">
  <http:request url="https://unsecurebank.com/balance" target="balance"/>
  <choice>
    <when expression="#[payload.amount > vars.balance]">
      <raise-error type="ACCOUNT:INSUFFICIENT_FUNDS" description="#['Cannot transfer $(payload.amount) since only $(vars.balance) are available.']"/>
    </when>
  </choice>
  <http:request url="https://unsecurebank.com/transfer"/>
</flow>