---
schema_version: "1"
id: 536f7077f7f457cc674aabe0f83b60999ca1e37b9075f30d45956776c6a8e958
title: DataWeave を使用した Java メソッドのコール
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.4/dataweave-cookbook-java-methods.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-cookbook-java-methods
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 33ac737ef44c1432e192b46c27ebc05b7ae136368cb1a28ea484edf511a97277
description: MuleSoft Documentation Site
release: "2.4"
latest: false
---
# DataWeave を使用した Java メソッドのコール

DataWeave ステートメントから、Mule プロジェクトにある任意の Java クラスの Java メソッドをコールできます。DataWeave では、静的メソッド (クラスの特定のインスタンスに属するメソッドではなく、Java クラスに属するメソッド) のみをコールできます。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​[DataWeave バージョン 1.2 の例](#1.2@dataweave::dataweave-examples.adoc)​を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

## [](#java-メソッドのコール)Java メソッドのコール

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

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

```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 つのすべての方法で、ランダムな文字列が追加された変数値が返されます。

```json
{
  "a":"myString969858409"
}
```

## [](#java-クラスのインスタンス化)Java クラスのインスタンス化

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

この簡単な Java クラスにはメソッドと変数があります。

```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`​ サンプルを作成する手順は、次のとおりです。

1. Studio でクラスのプロジェクトを作成します。これを行うには、​**\[New (新規)\]**​ → ​**\[Mule Project (Mule プロジェクト)\]**​ をクリックし、​**my-app**​ などの名前を付けて ​**\[Finish (完了)\]**​ をクリックします。
2. **my-app**​ から ​`org.mycompany.utils`​ パッケージを作成します。これを行うには、Studio の ​**Package Explorer**​ から ​**src/main/java**​ を右クリックして、​**\[New (新規)\]**​ → ​**\[Package (パッケージ)\]**​ を選択し、パッケージに ​`org.mycompany.utils`​ という名前を付けます。
3. 新しい ​`org.mycompany.utils`​ パッケージで ​`MyClass`​ クラスを作成します。これを行うには、​**org.mycompany.utils**​ を右クリックして、​**\[New (新規)\]**​ → ​**\[Class (クラス)\]**​ を選択し、クラスに ​`MyClass`​ という名前を付けて ​**\[Finish (完了)\]**​ をクリックします。
4. Studio で開いている ​**\[MyClass.java\]**​ タブで、コンテンツ ​`MyClass`​ をコピーして貼り付け、保存します。

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

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

この DataWeave の例を Studio プロジェクトに追加する手順は、次のとおりです。

1. **src/main/mule**​ の ​`my-app.xml`​ に戻り、Transform Message コンポーネントをプロジェクトのキャンバスにドラッグし、クリックして開きます。
2. コンポーネントの ​**\[Transform Message\]**​ タブで、ソースコード領域 (右側) のスクリプト全体を DataWeave スクリプト (上記) に置き換えます。
3. 変更内容を保存し、​**\[Preview (プレビュー)\]**​ (タブの右端にある) をクリックして、次の出力を表示します。

{
  "a":"myString"
}

Mule フローの Transform Message の設定の XML は、次のようになります。

```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>
```

## [](#java_bridge)Java ブリッジの使用

DataWeave では、Java ブリッジを使用して Java の任意の静的関数やコンストラクターをコールできます。この機能は、Java で記述されたビジネスロジックを再利用する必要がある場合や、空の公開コンストラクターがない Java オブジェクトをインスタンス化する必要がある場合に役立ちます。

Java ブリッジを使用するには、完全修飾された Java 名を DataWeave 名に変換します。

1. プレフィックス ​`!java`​ を追加します。
2. 完全修飾名のドットを ​`::`​ に置き換えます。

Java 関数を呼び出すときには、DataWeave は各引数を関数パラメーターで想定される型に変換します。

次の例は、​`java.lang.NullPointerException`​ の新しいインスタンスを作成する方法を示しています。

```dataweave
%dw 2.0
output application/json
---
java!java::lang::NullPointerException::new("foo")
```

次の例では、関数 ​`java.lang.String.valueOf`​ を呼び出しています。

```dataweave
%dw 2.0
output text/plain
import valueOf from java!java::lang::String
---
valueOf(true)
```

## [](#java-ブリッジの例)Java ブリッジの例

次の例は、入力 ​`uriParam`​ に基づいて挨拶メッセージを返す API を示しています。 Java ブリッジは、応答メッセージを作成する ​`my.class.org.Greeter`​ クラス内の静的メソッドをコールします。

```dataweave
%dw 2.0
output application/json
import java!my::class::org::Greeter
---
{
response: Greeter::greet(attributes.uriParams."name"
}
```

### [](#java-ブリッジの-xml-例)Java ブリッジの XML 例

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

```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>
```

### [](#アプリケーションをテストする)アプリケーションをテストする

アプリケーションをテストする手順は、次のとおりです。

1. Mule アプリケーションを保存して実行します。
2. curl コマンド ​`http://localhost:8081/greet/Username`​ を実行します。

Mule アプリケーションは、次の応答メッセージを返します。

```xml
{
 "response": "Greetings, Username!"
}
```

## [](#関連情報)関連情報

- [Java 形式](https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-formats-java)
- [サポートされるデータ形式](https://docs.mulesoft.com/jp/dataweave/2.4/dataweave-formats)