Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave ステートメントから、Mule プロジェクトにある任意の Java クラスの Java メソッドをコールできます。DataWeave では、静的メソッド (クラスの特定のインスタンスに属するメソッドではなく、Java クラスに属するメソッド) のみをコールできます。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 の例を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
メソッドをコールする前に、まず属するクラスを 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();
}
}
次のいずれかの方法で DataWeave コードから appendRandom()
メソッドをコールできます。
クラスをインポートして、メソッドを参照する:
%dw 2.0 import java!org::mycompany::utils::MyUtils output application/json --- { a: MyUtils::appendRandom("myString") }
クラス全体ではなく 1 つ以上のメソッドをインポートする:
%dw 2.0 import java!org::mycompany::utils::MyUtils::appendRandom output application/json --- { a: appendRandom("myString") }
メソッドが静的メソッドの場合、1 行でインポートしてコールする:
%dw 2.0 output application/json --- { a: java!org::mycompany::utils::MyUtils::appendRandom(vars.myString) }
3 つのすべての方法で、ランダムな文字列が追加された変数値が返されます。
{
"a":"myString969858409"
}
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;
}
}
Studio プロジェクトで MyClass
サンプルを作成する手順は、次のとおりです。
Studio でクラスのプロジェクトを作成します。これを行うには、[New (新規)] → [Mule Project (Mule プロジェクト)] をクリックし、my-app などの名前を付けて [Finish (完了)] をクリックします。
my-app から org.mycompany.utils
パッケージを作成します。これを行うには、Studio の Package Explorer から src/main/java を右クリックして、[New (新規)] → [Package (パッケージ)] を選択し、パッケージに org.mycompany.utils
という名前を付けます。
新しい org.mycompany.utils
パッケージで MyClass
クラスを作成します。これを行うには、org.mycompany.utils を右クリックして、[New (新規)] → [Class (クラス)] を選択し、クラスに MyClass
という名前を付けて [Finish (完了)] をクリックします。
Studio で開いている [MyClass.java] タブで、コンテンツ MyClass
をコピーして貼り付け、保存します。
次の DataWeave の例では、MyClass
をインポートし、クラスの新しいインスタンスを作成して、そのインスタンス変数 foo
をコールします。DataWeave からオブジェクトの非公開 getFoo()
メソッドをコールすることはできません。
%dw 2.0
import java!org::mycompany::utils::MyClass
output application/json
---
{
a: MyClass::new("myString").foo
}
この DataWeave の例を Studio プロジェクトに追加する手順は、次のとおりです。
src/main/mule の my-app.xml
に戻り、Transform Message コンポーネントをプロジェクトのキャンバスにドラッグし、クリックして開きます。
コンポーネントの [Transform Message] タブで、ソースコード領域 (右側) のスクリプト全体を DataWeave スクリプト (上記) に置き換えます。
変更内容を保存し、[Preview (プレビュー)] (タブの右端にある) をクリックして、次の出力を表示します。
{ "a":"myString" }
Mule フローの Transform Message の設定の XML は、次のようになります。
<flow name="my-appFlow" >
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
import java!org::mycompany::utils::MyClass
output application/json
---
{
a: MyClass::new("myString").foo
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
DataWeave では、Java ブリッジを使用して Java の任意の静的関数やコンストラクターをコールできます。この機能は、Java で記述されたビジネスロジックを再利用する必要がある場合や、空の公開コンストラクターがない Java オブジェクトをインスタンス化する必要がある場合に役立ちます。
Java ブリッジを使用するには、完全修飾された Java 名を DataWeave 名に変換します。
プレフィックス !java
を追加します。
完全修飾名のドットを ::
に置き換えます。
Java 関数を呼び出すときには、DataWeave は各引数を関数パラメーターで想定される型に変換します。
次の例は、java.lang.NullPointerException
の新しいインスタンスを作成する方法を示しています。
%dw 2.0
output application/json
---
java!java::lang::NullPointerException::new("foo")
次の例では、関数 java.lang.String.valueOf
を呼び出しています。
%dw 2.0
output text/plain
import valueOf from java!java::lang::String
---
valueOf(true)
次の例は、入力 uriParam
に基づいて挨拶メッセージを返す API を示しています。
Java ブリッジは、応答メッセージを作成する my.class.org.Greeter
クラス内の静的メソッドをコールします。
%dw 2.0
output application/json
import java!my::class::org::Greeter
---
{
response: Greeter::greet(attributes.uriParams."name"
}
この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="addcdb50-cdfa-400d-992f-495ab6dd373d" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<flow name="data-weave-java-bridge-example-flow" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/greet/{name}"/>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
import java!my::class::org::Greeter
---
{
response: Greeter::greet(attributes.uriParams."name")
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
</mule>