クラスのインスタンスの作成 - Mule4

Java コンストラクターのコール

このページの例は、​com.me​ パッケージに属する ​Person​ Java クラスに基づいています。

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;
    }
}

Java Module で使用するクラスはエクスポートする必要があります (デフォルトパッケージに属していない場合)。 エクスポートしないと、実行に失敗し、JAVA:CLASS_NOT_FOUND​ エラーが表示されます。 「リソースのエクスポート方法」​を参照してください。

このクラスのコンストラクターは、Java Module の ​new​ 操作を使用してコールできます。 この例は、パラメーターが不要なコンストラクターを使用して ​Person​ のインスタンスを作成する方法を示しています。

<java:new class="com.me.Person" constructor="Person()"/>

パラメーターが必要なコンストラクターを使用して ​Person​ オブジェクトを作成する方法を次に示します。

<java:new class="com.me.Person" constructor="Person(String, Integer)">
    <java:args>#[{
      name: 'John Doe',
      age: 30
    }]</java:args>
</java:new>

コンストラクターのパラメーターでは、​constructor="Person(java.lang.String, java.lang.Integer)"​ などの完全なパッケージ名を指定できます。これは必要ありませんが、コードをより明確にしたり、Java コードに競合するクラス名がある場合に役立ちます。

args​ パラメーターにコンストラクターの引数を設定する場合は、マップのキーでパラメーターがコンストラクターに渡される方法を判断します。

パラメーターを名前 (​firstName​、​age​ など) で参照するには、 -parameters​ コンパイラーフラグを使用して、メソッドまたはコンストラクターを含む Java クラスをコンパイルする必要があります。

クラスが ​-parameters​ フラグを使用してコンパイルされていない場合は、同じパラメーターが宣言された順序と ​arg0​、​arg1​ のような正規名で参照されます。

<java:args>#[{
  arg0: 'John Doe',
  arg1: 30
}]</java:args>

Java クラスが Studio プロジェクトで定義されている場合、​-parameters​ フラグを使用して Java クラスをコンパイルするように Maven コンパイラープラグインを ​pom.xml​ で設定する必要があります。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>x.x.x</version>
    <configuration>
        <compilerArgs>
            <arg>-parameters</arg>
        </compilerArgs>
    </configuration>
</plugin>

Studio での DataSense サポート

Java Module を使用する利点の 1 つは ​DataSense​ サポートです。これにより、​new​ 操作の入力として機能する ​args​ マップをビルドできます。

new​ 操作で ​com.me.Person​ クラスの ​Person(String, Integer)​ コンストラクターをコールする前記の例を続行し、グラフィカルビューの表示アイコン ​5%​ をクリックして、項目を照合するビューを表示します。フローの前のコンポーネントが (​Set Payload​ コンポーネントでできることと同様に) ​name​ および ​age​ キーを含むマップを出力するとします。このビューは次のようになります。

matching input

項目を左から右にドラッグアンドドロップすることで一致させることができます。これにより、次のようになります。

matched input

new​ 操作が設定されて準備が整いました。

DataSense は、操作の出力のメタデータも提供します。​new​ 操作により、次に示すように ​Person​ オブジェクトが出力メッセージのペイロード内に配置されます。

output metadata

対象パラメーター

出力オブジェクトをペイロード内に配置する代わりに、​対象パラメーター​をサポートする ​new​ 操作で出力オブジェクトを変数に保存できます。

例:

<java:new class="com.me.Person"
    constructor="Person(String, Integer)"
    target="john">
    <java:args>#[{
      name: 'John Doe',
      age: 30
    }]</java:args>
</java:new>

出力オブジェクトは変数に保存され、​"#[vars.john]"​ として後からアクセスできるようになります。