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>