Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerJava Module には、オブジェクトがクラスのインスタンスかどうかをテストする Validate type
操作があります。この操作は、クラスのサブタイプを受け入れるか拒否するように設定することもできます。true
の場合、操作はペイロードを変更せず、フローは実行を続行します。それ以外の場合、操作はエラーをスローしてフローを中断し、制御をエラーハンドラーに渡します。
この例は、Person
クラスを定義します。
package com.me;
public class Person {
private String name;
private Integer age;
public Person() {
this.name = "Max Mule";
this.age = 10;
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
この例は、Person
クラスを拡張する Employee
クラスを定義します。
package com.me;
public class Employee extends Person {
private String company;
public Employee(String name, Integer age, String company) {
super(name, age);
this.company = company;
}
}
Java Module で使用するクラスはエクスポートする必要があります (デフォルトパッケージに属していない場合)。エクスポートしないと、実行に失敗し、JAVA:CLASS_NOT_FOUND エラーが表示されます。「リソースのエクスポート方法」を参照してください。 |
オブジェクトが特定のクラスに属しているかどうかを確認するには、オブジェクトのインスタンスが必要です。
そのためには、new
操作をコールして Employee
オブジェクトを作成し、jane
変数内に置きます。
<java:new class="com.me.Employee"
constructor="Employee(String, Integer, String)"
target="jane">
<java:args>#[{
name: 'Jane Avi',
age: 28,
company: MuleSoft
}]</java:args>
</java:new>
オブジェクトが Employee
クラスに属する vars.jane
に保存されているかどうかを確認するには、Validate type
操作を使用します。
<java:validate-type class="com.me.Employee" instance="#[vars.jane]" />
この場合、オブジェクトは Employee
のインスタンスであるため、フローは通常どおり実行を続行し、ペイロードは変更されません。
Validate type
操作には Accept subtypes
パラメーターがあります。このパラメーターは、操作がクラスのすべてのサブクラスを受け入れるかどうかを示します。
このパラメーターには true
、false
、または式を指定可能で、省略した場合はデフォルトで true
になります。
引き続き前記の例を使用すると、vars.jane
内のオブジェクトは Person
クラスを拡張する Employee
クラスに属します。つまり、Employee
は Person
のサブタイプになります。そのため、この例を実行すると true
に解決され、フローは通常どおり実行されます。
<java:validate-type
class="com.me.Person"
instance="#[vars.jane]"
acceptSubtypes="true" />
Accept subtypes パラメーターを省略すると、この値はデフォルトで true になります。
|
前のコードは次と同等です。
<java:validate-type
class="com.me.Person"
instance="#[vars.jane]" />
ただし、Accept subtypes
を false
に設定するとします。
<java:validate-type
class="com.me.Person"
instance="#[vars.jane]"
acceptSubtypes="false" />
実行中、操作はエラーをスローしてフローを中断し、制御をエラーハンドラーに渡します。
この例では、Java Module で、オブジェクトがクラスのインスタンスの場合に true
または false
を返す DataWeave isInstanceOf()
関数を提供します。Validate type
操作とは異なり、false
に評価されたときにエラーはスローされません。
<choice>
<when expression="#[Java::isInstanceOf(vars.jane, com.me.Employee)]">
<flow-ref name="routeToCompany" />
</when>
</choice>