DataWeave を使用した Java メソッドのコール

DataWeave 2.1 は Mule 4.1 と互換性があります。 Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその​​すべてのサポートが終了Leaving the Siteします。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

『標準サポートが適用されている最新バージョンの Mule 4 にアップグレード』​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

DataWeave ステートメントから、Mule プロジェクトにある任意の Java クラスの Java メソッドをコールできます。DataWeave では、静的メソッド (クラスの特定のインスタンスに属するメソッドではなく、Java クラスに属するメソッド) のみをコールできます。

Java メソッドのコール

メソッドをコールする前に、まず属するクラスを DataWeave コードにインポートする必要があります。DataWeave モジュールをインポートするときのように、​java!​ をステートメントに含めて Java クラスをインポートできます。

たとえば、以下は文字列の最後に乱数を追加する 1 つのメソッドがある簡単な Java クラスです。このクラスは、Mule プロジェクトの ​src/main/java​ フォルダの ​org.mycompany.utils​ という名前の Java パッケージの一部として作成されていることが前提となっています。

package org.mycompany.utils;

import java.util.Random;

public class MyUtils {

	public static String appendRandom(String base) {
		return base + new Random().nextInt();
	}

}
java

次のいずれかの方法で DataWeave コードから ​appendRandom()​ メソッドをコールできます。

  • クラスをインポートして、メソッドを参照する:

    %dw 2.0
    import java!org::mycompany::utils::MyUtils
    output application/json
    ---
    {
    	a: MyUtils::appendRandom("myString")
    }
    dataweave
  • クラス全体ではなく 1 つ以上のメソッドをインポートする:

    %dw 2.0
    import java!org::mycompany::utils::MyUtils::appendRandom
    output application/json
    ---
    {
    	a: MyUtils::appendRandom("myString")
    }
    dataweave
  • メソッドが静的メソッドの場合、1 行でインポートしてコールする:

    %dw 2.0
    output application/json
    ---
    {
    	a: java!org::mycompany::utils::MyUtils::appendRandom(vars.myString)
    }
    dataweave

3 つのすべての方法で、ランダムな文字列が追加された変数値が返されます。

{
  "a":"myString969858409"
}
json

Java クラスのインスタンス化

DataWeave コードで、任意のクラスの新しいオブジェクトをインスタンス化できます。インスタンスを作成したら、DataWeave でそのインスタンスメソッドをコールできなくなります。ただし、その変数を参照することはできます。

以下は、メソッドと変数がある簡単な Java クラスです。

package org.mycompany.utils;
public class MyClass {

	private String foo;
	 public MyClass(String foo) {
		 this.foo = foo;
	}

	 public String getFoo() {
		return foo;
	}

}
java

以下の DataWeave の例では、まず ​MyClass​ クラスをインポートし、次にその新しいインスタンスを作成して、そのインスタンス変数 ​foo​ をコールします。DataWeave で非公開メソッド ​getFoo()​ をコールすることはできません。

%dw 2.0
import java!org::mycompany::utils::MyClass
output application/json
---
{
	a: MyClass::new("myString").foo
}
dataweave

このスクリプトは、次の出力を生成します。

{
  "a":"myString"
}
json