Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerJava Module は、Throwable インスタンスに有益な DataWeave 関数を公開します。
(Java では、Throwable は throw
ステートメントです)。
これらの関数は DataWeave バージョン 1.2.0 以降で使用可能になりました。
isCausedBy
関数を使用して、Throwable の原因が特定の種別の例外であったのかどうかを確認できます。これは、エラーハンドラーにロジックを追加するときに特に役立ちます。
package com.me;
public class TaxCalculator {
public Double calculateTax(Double price) {
if (price == null) {
throw new NullPointerException("Must provide a value for price");
}
if (price < 0) {
throw new IllegalArgumentException("Price must be a non-negative value, but was: " + price);
}
return price * 0.21;
}
}
calculateTax(Double price)
メソッドは、IllegalArgumentException
および NullPointerException
例外を宣言します。
次のコード例は、invoke
操作の実行中にエラーをスローするフローの部分をリストします。
calculateTax(Double price)
メソッドの失敗した呼び出し中に発生した Java 例外を確認するには、エラーハンドラーで isCausedBy
関数を使用して、ケースごとに異なるロジックを追加します。
<java:new class="com.me.TaxCalculator"
constructor="TaxCalculator()"
target="taxCalculator"/>
<java:invoke instance="#[vars.taxCalculator]"
class="com.me.TaxCalculator"
method="calculateTax(Double)">
<java:args>#[{price: payload.price}]</java:args>
</java:invoke>
<error-handler>
<on-error-continue
when="#[Java::isCausedBy(error.cause, 'java.lang.IllegalArgumentException')]">
<set-payload value="Negative prices are not allowed."/>
</on-error-continue>
<on-error-continue
type="#[Java::isCausedBy(error.cause, 'java.lang.NullPointerException')]">
<set-payload value="There is no price."/>
</on-error-continue>
</error-handler>
getRootCause
関数は、例外のラップとは関係のない Throwable の根本原因を取得します。
次の例では、税額計算のエラーはすべて、Throwable の根本原因を取得する handle(Throwable)
メソッドが含まれる FailureHandler
クラスで処理されます。それを可能にするため、getRootCause
関数を使用して、根本原因を handle(Throwable)
メソッドに引数として渡すことができます。
<java:new class="com.me.TaxCalculator"
constructor="TaxCalculator()"
target="taxCalculator"/>
<java:invoke instance="#[vars.taxCalculator]"
class="com.me.TaxCalculator"
method="calculateTax(Double)">
<java:args>#[{price: payload.price}]</java:args>
</java:invoke>
<error-handler>
<on-error-continue>
<java:invoke-static
class="com.me.FailureHandler"
method="handle(Throwable)">
<java:args>#[{cause: Java::getRootCause(error.cause)}]</java:args>
</java:invoke-static>
</on-error-continue>
</error-handler>