# mulesoft Java Module - Full Documentation # Anypoint Code Builder を使用した Java Module の設定 Anypoint Code Builder プロジェクトで使用する Java Module を使用してカスタム Java コードを定義します。Anypoint Code Builder を使用して Java Module を設定するには、Anypoint Code Builder で基本インテグレーションプロジェクトを作成し、ビジネスロジックを処理する Mule アプリケーションにコネクタと他のコンポーネントを追加してから、Java Module の属性を設定します。 ## [](#始める前に)始める前に Anypoint Code Builder インテグレーションを作成する前に、次の作業を行う必要があります。 - [Anypoint Code Builder の Web またはデスクトップ IDE をセットアップしてアクセスします](https://docs.mulesoft.com/jp/anypoint-code-builder/start-acb)​。 - Anypoint Platform にアクセスするためのログイン情報を用意します。 - Extension Pack for Java (Microsoft 提供) が Visual Studio Code にインストールされていることを確認します。 ## [](#creating-new-integration-project)新しいインテグレーションプロジェクトの作成 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] 新しいインテグレーションプロジェクトを作成すると、Anypoint Code Builder によりプロジェクトに ​`src/main/java`​ および ​`/src/test/java`​ フォルダーが作成されます。既存のプロジェクトの場合、これらのフォルダーを手動で作成できます。 ## [](#adding-components-to-project)プロジェクトへのコンポーネントの追加 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] ## [](#configuring-component-attributes)コンポーネント属性の設定 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] ## [](#configure-trigger)フローのトリガーを設定する トリガー (ソース) は、指定された条件が満たされたときにフローを開始します。コネクタに独自のソースが関連付けられている場合、コネクタ固有のトリガーを使用してフローを開始できます。各コネクタトリガーには、固有の設定があります。 このコネクタの以下のソースを設定できます。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$t-studio-partial.adoc\[\] ### [](#configuring-new)新しい操作の設定 Java Module の ​**New**​ 操作を使用して新しいクラスインスタンスを作成します。コンストラクターの識別子にクラス名とコンストラクター名が含まれます。コンストラクターは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`org.bar.Me`​ クラスに属する ​`Me(String name, int age)`​ というコンストラクターを呼び出す場合、このメソッドの識別子は ​`Me(String,int)`​ になります。 Anypoint Code Builder UI で ​**New**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[New\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] 1. **\[Constructor (コンストラクター)\]**​ で、使用するコンストラクターを検索して選択します。
この項目が空白の場合、更新アイコンをクリックして入力してください。
3. **\[Advanced (詳細)\]**​ タブを選択して、次の属性を設定します。
UI 項目 説明 必須

Target variable (対象変数)

クラスインスタンスを割り当てる変数の名前。

いいえ

Target value (対象値)

操作の出力を評価する式。式の結果は対象変数に保存されます。

いいえ

エラーのマッピング

Mule エラー種別をマップするカスタムエラー種別。マッピングは、アプリケーションのエラーをさらに識別してグループ化するのに役立つ場合があります。この属性は、XML エディターで設定します。Mule Errorsを参照してください。

いいえ

4. **\[Input/Output (入力/出力)\]**​ タブを選択して、DataWeave に保存される入力変数と出力変数を絞り込んで表示します。 クラスインスタンスを追加したら、​[**Invoke**​ 操作を設定します](#configuring-invoke)​。 ### [](#configuring-invoke)Invoke 操作の設定 指定したクラスインスタンスを使用して引数を指定したメソッドを呼び出します。呼び出すメソッドの識別子にはクラス名とメソッド名が含まれます。 Anypoint Code Builder UI で ​**Invoke**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Invoke\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. メソッドを呼び出すためのクラス​**インスタンス**​を選択します。 この値は ​**New**​ 操作に割り当てられる対象変数です。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] ### [](#configuring-invoke-static)Invoke Static 操作の設定 指定した引数で静的メソッドを呼び出します。 Anypoint Code Builder UI で ​**Invoke Static**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Invoke Static\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] ### [](#validate-type-操作の設定)Validate Type 操作の設定 クラスインスタンスが、​**Validate Type**​ 操作を使用する想定されるクラス (​`instanceof`​) のインスタンスであることを確認します。 Anypoint Code Builder UI で ​**Validate Type**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Validate type\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. インスタンスが所属する ​**\[Class (クラス)\]**​ を選択します。 2. 検証するクラス​**インスタンス**​の名前を入力します。 3. **\[Accept subtypes (サブタイプの受け入れ)\]**​ を選択して、クラスのサブタイプを受け入れます。 クラスインスタンスのクラスが同じである必要がある場合は、このオプションをオフにします。 ## [](#例)例 ### [](#creating-java-class)Java クラスの作成 アプリケーションフローで使用するメソッドが含まれる Java クラスを作成します。プロジェクトに作成するクラスは、Anypoint Code Builder ワークスペースの他のプロジェクトでは使用できません。 1. Anypoint Code Builder プロジェクトの ​`src/main/java`​ の下に ​`com.me`​ という新しい Java パッケージを作成します。 2. `TaxCalculator.java`​ という新しい Java クラスを作成し、実装を追加します。次に例を示します。 ```java package com.me; public class TaxCalculator { private Double percentBaseTax = 7.0; public Double calculateTax(Double price, Integer percentAdditionalTax) { return price * (this.percentBaseTax + percentAdditionalTax) / 100; } public Boolean isTaxFree(Double price) { if (price < 10) { return true; } return false; } } ``` このコードの例には 2 つのメソッドがあります。 - `calculateTax`​。​`price`​ および ​`percentAdditionalTax`​ パラメーターを受け取ります。 - `isTaxFree`​。​`price`​ パラメーターを受け取ります。 ### [](#http-トリガーを設定する)HTTP トリガーを設定する 1. キャンバス UI で ​**\[Listener\]**​ コンポーネントをクリックします。 2. 必要に応じて、編集アイコンをクリックして ​**Listener**​ コンポーネントの名前を変更します。 3. コネクタの設定ファイルを選択するか、フローの外部の XML に HTTP 設定を追加します。次に例を示します。 ```xml ``` 4. **\[General (一般)\]**​ タブの ​**\[Path (パス)\]**​ 項目に​`「/calculateTax」`​と入力します。 5. **\[Advanced (詳細)\]**​ タブで ​**\[Allowed methods (許可されるメソッド)\]**​ を ​`POST`​ に設定します。 ### [](#新しいクラスインスタンスを作成する)新しいクラスインスタンスを作成する この例で使用するメソッドは非静的のため、新しいクラスインスタンスを作成する必要があります。 1. キャンバスで ​**\[New\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. 使用するメソッドが含まれる ​**\[Class (クラス)\]**​ を選択します。この場合は ​`com.me.TaxCalculator`​ です。 2. 使用する ​**\[Method (メソッド)\]**​ を選択します。この場合は ​`TaxCalculator()`​ です。
この項目が空白の場合、更新アイコンをクリックして入力してください。
3. **\[Advanced (詳細)\]**​ タブで、新しいクラスインスタンスを ​`taxCalculator`​ という対象変数に割り当てます。 コードは次のようになります。 ```xml ``` ### [](#invoke-操作を追加する)Invoke 操作を追加する メソッドを呼び出すには、​**Invoke**​ 操作を追加します。 1. キャンバスで ​**\[Invoke\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. メソッドを呼び出すためのクラス​**インスタンス**​として​`「#[vars.taxCalculator]」`​と入力します。 2. 使用するメソッドが含まれる ​**\[Class (クラス)\]**​ を選択します。この場合は ​`com.me.TaxCalculator`​ です。 3. 使用する ​**\[Method (メソッド)\]**​ を選択します。この場合は ​`calculateTax(java.lang.Double,java.lang.Integer)`​ です。 表示されているメソッドは標準の非静的 Java メソッドと、作成したメソッドです。 3. **\[Advanced (詳細)\]**​ タブで、Invoke 操作を ​`taxResult`​ という対象変数に割り当てます。 4. XML エディターで Java 引数を DataWeave 式として追加します。 ```xml #[{ arg0: payload:price, arg1: payload:percentAdditionalTax }] ``` XML コードは次のようになります。 ```xml #[{ arg0: payload.price, arg1: payload.percentAdditionalTax }] ``` ### [](#set-payload-トランスフォーマーを追加する)Set Payload トランスフォーマーを追加する メッセージのペイロードを更新するには、Set Payload (​`set-payload`​) コンポーネントを使用します。ペイロードは、文字列リテラルまたは DataWeave 式です。 1. キャンバス UI で ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-plus.png)​ (​**\[Add component (コンポーネントを追加)\]**​) アイコンをクリックします。 2. **\[Add Component (コンポーネントを追加)\]**​ パネルで、「​`Set Payload`​」を検索して選択します。 3. **\[Set Payload\]**​ コンポーネントをクリックします。 4. **\[General (一般)\]**​ タブで、​**\[Value (値)\]**​ に「​`#[vars.taxResult as String]`​」と入力します。 5. **\[Encoding (エンコード)\]**​ で ​**\[ISO 10646/Unicode(UTF8)\]**​ を選択します。 6. **\[Mime type (MIME タイプ)\]**​ で ​**\[text/plain (テキスト/プレーン)\]**​ を選択します。 XML コードは次のようになります。 ```xml #[{ arg0: payload.price, arg1: payload.percentAdditionalTax }] ``` ### [](#run-debug-mode)デバッグモードでアプリケーションを実行する デバッグ条件を設定したら、デバッグセッションを実行し、各ブレークポイントで Mule アプリケーションを評価します。 1. \[Run and Debug (実行とデバッグ)\] パネルを開きます。 手順を表示 - アクティビティバーの ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-run-debug.png)​ (​**Run and Debug (実行とデバッグ)**​) アイコンをクリックする。 - キーボードショートカットを使用する。 - Mac: Cmd+Shift+d - Windows: Ctrl+Shift+d - デスクトップ IDE で、​**\[View (表示)\]**​ > ​**\[Run (実行)\]**​ を選択する。 - クラウド IDE で、​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-menu.png)​ (メニュー) アイコンをクリックし、​**\[View (表示)\]**​ > ​**\[Run (実行)\]**​ を選択する。 2. **\[Debug Mule Application (Mule アプリケーションをデバッグ)\]**​ の ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-start-debug.png)​ (​**Start Debugging (F5) (デバッグを開始 (F5))**​) アイコンをクリックします。 または、​**\[Start Debugging (F5) (デバッグを開始 (F5))\]**​ アイコンが存在しない場合は、次の手順を実行します。 1. **\[Run and Debug (実行とデバッグ)\]**​ をクリックします。 2. **\[Select debugger (デバッガーを選択)\]**​ ドロップダウンメニューが表示された場合は、​**\[Mule XML Debugger (Mule XML デバッガー)\]**​ を選択してデバッグセッションを開始します。 ![\[Run and Debug (実行とデバッグ)\] ボタンと \[Mule Xml Debugger (Mule XML デバッガー)\] メニュー項目](../../anypoint-code-builder/_images/run-debug-imported-folder.png) アプリケーションが正常にデプロイされると、出力パネルに ​`DEPLOYED`​ ログメッセージが表示されます。 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \* - - + DOMAIN + - - \* - - + STATUS + - - \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \* default \* DEPLOYED \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
[Run (実行)]​ > ​[Start without Debugging (デバッグなしで実行)]​ を選択すると、エラーが発生します。
Anypoint Code Builder でアプリケーションがパッケージ化され、埋め込み Mule Runtime Engine にデプロイされます。 ターミナルが開き、状況を参照できます。 ![ターミナルウィンドウでのデバッグの状況](/mulesoft/current/ja-jp/anypoint-code-builder/_images/deb-terminal-running.png) ターミナルにメッセージが表示されます。ステータスバーが赤に変わり、アプリケーションが実行中であることが示されます。 デバッグツールバーのボタンを使用して、Mule アプリケーションのデバッグを制御します。 ## [](#関連情報)関連情報 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/1.2/java-reference) # Anypoint Code Builder を使用した Java Module の設定 Anypoint Code Builder プロジェクトで使用する Java Module を使用してカスタム Java コードを定義します。Anypoint Code Builder を使用して Java Module を設定するには、Anypoint Code Builder で基本インテグレーションプロジェクトを作成し、ビジネスロジックを処理する Mule アプリケーションにコネクタと他のコンポーネントを追加してから、Java Module の属性を設定します。 ## [](#始める前に)始める前に Anypoint Code Builder インテグレーションを作成する前に、次の作業を行う必要があります。 - [Anypoint Code Builder の Web またはデスクトップ IDE をセットアップしてアクセスします](https://docs.mulesoft.com/jp/anypoint-code-builder/start-acb)​。 - Anypoint Platform にアクセスするためのログイン情報を用意します。 - Extension Pack for Java (Microsoft 提供) が Visual Studio Code にインストールされていることを確認します。 ## [](#creating-new-integration-project)新しいインテグレーションプロジェクトの作成 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] 新しいインテグレーションプロジェクトを作成すると、Anypoint Code Builder によりプロジェクトに ​`src/main/java`​ および ​`/src/test/java`​ フォルダーが作成されます。既存のプロジェクトの場合、これらのフォルダーを手動で作成できます。 ## [](#adding-components-to-project)プロジェクトへのコンポーネントの追加 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] ## [](#configuring-component-attributes)コンポーネント属性の設定 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] ## [](#configure-trigger)フローのトリガーを設定する トリガー (ソース) は、指定された条件が満たされたときにフローを開始します。コネクタに独自のソースが関連付けられている場合、コネクタ固有のトリガーを使用してフローを開始できます。各コネクタトリガーには、固有の設定があります。 このコネクタの以下のソースを設定できます。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$t-studio-partial.adoc\[\] ### [](#configuring-new)新しい操作の設定 Java Module の ​**New**​ 操作を使用して新しいクラスインスタンスを作成します。コンストラクターの識別子にクラス名とコンストラクター名が含まれます。コンストラクターは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`org.bar.Me`​ クラスに属する ​`Me(String name, int age)`​ というコンストラクターを呼び出す場合、このメソッドの識別子は ​`Me(String,int)`​ になります。 Anypoint Code Builder UI で ​**New**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[New\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] 1. **\[Constructor (コンストラクター)\]**​ で、使用するコンストラクターを検索して選択します。
この項目が空白の場合、更新アイコンをクリックして入力してください。
3. **\[Advanced (詳細)\]**​ タブを選択して、次の属性を設定します。
UI 項目 説明 必須

Target variable (対象変数)

クラスインスタンスを割り当てる変数の名前。

いいえ

Target value (対象値)

操作の出力を評価する式。式の結果は対象変数に保存されます。

いいえ

エラーのマッピング

Mule エラー種別をマップするカスタムエラー種別。マッピングは、アプリケーションのエラーをさらに識別してグループ化するのに役立つ場合があります。この属性は、XML エディターで設定します。Mule Errorsを参照してください。

いいえ

4. **\[Input/Output (入力/出力)\]**​ タブを選択して、DataWeave に保存される入力変数と出力変数を絞り込んで表示します。 クラスインスタンスを追加したら、​[**Invoke**​ 操作を設定します](#configuring-invoke)​。 ### [](#configuring-invoke)Invoke 操作の設定 指定したクラスインスタンスを使用して引数を指定したメソッドを呼び出します。呼び出すメソッドの識別子にはクラス名とメソッド名が含まれます。 Anypoint Code Builder UI で ​**Invoke**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Invoke\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. メソッドを呼び出すためのクラス​**インスタンス**​を選択します。 この値は ​**New**​ 操作に割り当てられる対象変数です。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] ### [](#configuring-invoke-static)Invoke Static 操作の設定 指定した引数で静的メソッドを呼び出します。 Anypoint Code Builder UI で ​**Invoke Static**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Invoke Static\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$acb-java-module-partial.adoc\[\] ### [](#validate-type-操作の設定)Validate Type 操作の設定 クラスインスタンスが、​**Validate Type**​ 操作を使用する想定されるクラス (​`instanceof`​) のインスタンスであることを確認します。 Anypoint Code Builder UI で ​**Validate Type**​ の属性を設定する手順は、次のとおりです。 1. キャンバスで ​**\[Validate type\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. インスタンスが所属する ​**\[Class (クラス)\]**​ を選択します。 2. 検証するクラス​**インスタンス**​の名前を入力します。 3. **\[Accept subtypes (サブタイプの受け入れ)\]**​ を選択して、クラスのサブタイプを受け入れます。 クラスインスタンスのクラスが同じである必要がある場合は、このオプションをオフにします。 ## [](#例)例 ### [](#creating-java-class)Java クラスの作成 アプリケーションフローで使用するメソッドが含まれる Java クラスを作成します。プロジェクトに作成するクラスは、Anypoint Code Builder ワークスペースの他のプロジェクトでは使用できません。 1. Anypoint Code Builder プロジェクトの ​`src/main/java`​ の下に ​`com.me`​ という新しい Java パッケージを作成します。 2. `TaxCalculator.java`​ という新しい Java クラスを作成し、実装を追加します。次に例を示します。 ```java package com.me; public class TaxCalculator { private Double percentBaseTax = 7.0; public Double calculateTax(Double price, Integer percentAdditionalTax) { return price * (this.percentBaseTax + percentAdditionalTax) / 100; } public Boolean isTaxFree(Double price) { if (price < 10) { return true; } return false; } } ``` このコードの例には 2 つのメソッドがあります。 - `calculateTax`​。​`price`​ および ​`percentAdditionalTax`​ パラメーターを受け取ります。 - `isTaxFree`​。​`price`​ パラメーターを受け取ります。 ### [](#http-トリガーを設定する)HTTP トリガーを設定する 1. キャンバス UI で ​**\[Listener\]**​ コンポーネントをクリックします。 2. 必要に応じて、編集アイコンをクリックして ​**Listener**​ コンポーネントの名前を変更します。 3. コネクタの設定ファイルを選択するか、フローの外部の XML に HTTP 設定を追加します。次に例を示します。 ```xml ``` 4. **\[General (一般)\]**​ タブの ​**\[Path (パス)\]**​ 項目に​`「/calculateTax」`​と入力します。 5. **\[Advanced (詳細)\]**​ タブで ​**\[Allowed methods (許可されるメソッド)\]**​ を ​`POST`​ に設定します。 ### [](#新しいクラスインスタンスを作成する)新しいクラスインスタンスを作成する この例で使用するメソッドは非静的のため、新しいクラスインスタンスを作成する必要があります。 1. キャンバスで ​**\[New\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. 使用するメソッドが含まれる ​**\[Class (クラス)\]**​ を選択します。この場合は ​`com.me.TaxCalculator`​ です。 2. 使用する ​**\[Method (メソッド)\]**​ を選択します。この場合は ​`TaxCalculator()`​ です。
この項目が空白の場合、更新アイコンをクリックして入力してください。
3. **\[Advanced (詳細)\]**​ タブで、新しいクラスインスタンスを ​`taxCalculator`​ という対象変数に割り当てます。 コードは次のようになります。 ```xml ``` ### [](#invoke-操作を追加する)Invoke 操作を追加する メソッドを呼び出すには、​**Invoke**​ 操作を追加します。 1. キャンバスで ​**\[Invoke\]**​ コンポーネントをクリックします。 2. **\[General (一般)\]**​ タブで次の手順を実行します。 1. メソッドを呼び出すためのクラス​**インスタンス**​として​`「#[vars.taxCalculator]」`​と入力します。 2. 使用するメソッドが含まれる ​**\[Class (クラス)\]**​ を選択します。この場合は ​`com.me.TaxCalculator`​ です。 3. 使用する ​**\[Method (メソッド)\]**​ を選択します。この場合は ​`calculateTax(java.lang.Double,java.lang.Integer)`​ です。 表示されているメソッドは標準の非静的 Java メソッドと、作成したメソッドです。 3. **\[Advanced (詳細)\]**​ タブで、Invoke 操作を ​`taxResult`​ という対象変数に割り当てます。 4. XML エディターで Java 引数を DataWeave 式として追加します。 ```xml #[{ arg0: payload:price, arg1: payload:percentAdditionalTax }] ``` XML コードは次のようになります。 ```xml #[{ arg0: payload.price, arg1: payload.percentAdditionalTax }] ``` ### [](#set-payload-トランスフォーマーを追加する)Set Payload トランスフォーマーを追加する メッセージのペイロードを更新するには、Set Payload (​`set-payload`​) コンポーネントを使用します。ペイロードは、文字列リテラルまたは DataWeave 式です。 1. キャンバス UI で ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-plus.png)​ (​**\[Add component (コンポーネントを追加)\]**​) アイコンをクリックします。 2. **\[Add Component (コンポーネントを追加)\]**​ パネルで、「​`Set Payload`​」を検索して選択します。 3. **\[Set Payload\]**​ コンポーネントをクリックします。 4. **\[General (一般)\]**​ タブで、​**\[Value (値)\]**​ に「​`#[vars.taxResult as String]`​」と入力します。 5. **\[Encoding (エンコード)\]**​ で ​**\[ISO 10646/Unicode(UTF8)\]**​ を選択します。 6. **\[Mime type (MIME タイプ)\]**​ で ​**\[text/plain (テキスト/プレーン)\]**​ を選択します。 XML コードは次のようになります。 ```xml #[{ arg0: payload.price, arg1: payload.percentAdditionalTax }] ``` ### [](#run-debug-mode)デバッグモードでアプリケーションを実行する デバッグ条件を設定したら、デバッグセッションを実行し、各ブレークポイントで Mule アプリケーションを評価します。 1. \[Run and Debug (実行とデバッグ)\] パネルを開きます。 手順を表示 - アクティビティバーの ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-run-debug.png)​ (​**Run and Debug (実行とデバッグ)**​) アイコンをクリックする。 - キーボードショートカットを使用する。 - Mac: Cmd+Shift+d - Windows: Ctrl+Shift+d - デスクトップ IDE で、​**\[View (表示)\]**​ > ​**\[Run (実行)\]**​ を選択する。 - クラウド IDE で、​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-menu.png)​ (メニュー) アイコンをクリックし、​**\[View (表示)\]**​ > ​**\[Run (実行)\]**​ を選択する。 2. **\[Debug Mule Application (Mule アプリケーションをデバッグ)\]**​ の ​![](/mulesoft/current/ja-jp/anypoint-code-builder/_images/icon-start-debug.png)​ (​**Start Debugging (F5) (デバッグを開始 (F5))**​) アイコンをクリックします。 または、​**\[Start Debugging (F5) (デバッグを開始 (F5))\]**​ アイコンが存在しない場合は、次の手順を実行します。 1. **\[Run and Debug (実行とデバッグ)\]**​ をクリックします。 2. **\[Select debugger (デバッガーを選択)\]**​ ドロップダウンメニューが表示された場合は、​**\[Mule XML Debugger (Mule XML デバッガー)\]**​ を選択してデバッグセッションを開始します。 ![\[Run and Debug (実行とデバッグ)\] ボタンと \[Mule Xml Debugger (Mule XML デバッガー)\] メニュー項目](../../anypoint-code-builder/_images/run-debug-imported-folder.png) アプリケーションが正常にデプロイされると、出力パネルに ​`DEPLOYED`​ ログメッセージが表示されます。 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \* - - + DOMAIN + - - \* - - + STATUS + - - \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \* default \* DEPLOYED \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
[Run (実行)]​ > ​[Start without Debugging (デバッグなしで実行)]​ を選択すると、エラーが発生します。
Anypoint Code Builder でアプリケーションがパッケージ化され、埋め込み Mule Runtime Engine にデプロイされます。 ターミナルが開き、状況を参照できます。 ![ターミナルウィンドウでのデバッグの状況](/mulesoft/current/ja-jp/anypoint-code-builder/_images/deb-terminal-running.png) ターミナルにメッセージが表示されます。ステータスバーが赤に変わり、アプリケーションが実行中であることが示されます。 デバッグツールバーのボタンを使用して、Mule アプリケーションのデバッグを制御します。 ## [](#関連情報)関連情報 Unresolved include directive in modules/ROOT/pages/configure-java-module-acb.adoc - include::connectors::partial$configure-acb-connectors-partial.adoc\[\] [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/latest/java-reference) # Java Module 1.2 リリースノート: [Java Module リリースノート](https://docs.mulesoft.com/jp/release-notes/connector/java-module)​ Exchange: [Java Module](https://www.mulesoft.com/exchange/org.mule.module/mule-java-module/) Mule 4 は、次の目的で構築されています。 - カスタムコードの必要性を最小限に抑える。 - Java に関する知識や理解を不要にする。 ただし、次のような一部の高度なユースケースでは、カスタム Java コードとのインテグレーションが必要です。 - ライブラリ (税額計算ライブラリなど) を再利用する場合。 - 組織の標準である正規オブジェクトモデルを再利用する場合。 - Java を使用してカスタムロジックを実行する場合。 Mule 3 では、Java クラスのインスタンスを作成して Java メソッドを実行する場合、MEL が架け橋になります。Mule 4 では、MEL の代わりに DataWeave という関数型言語が導入され、Java との相互作用が変化しています。 関数型言語は入力引数に副次的な影響を及ぼさないため、DataWeave がランダムなオブジェクトインスタンスでランダムなインスタンスメソッドを実行するのは理にかなったことではありません。 そのため、純粋な DataWeave では、Java Module を使用しない静的 Java メソッドのみのコールがサポートされています。 ## [](#java-module-と-scripting-module)Java Module と Scripting Module Java Module を使用することも、​[Scripting Module](https://docs.mulesoft.com/jp/scripting-module/latest/)​ を使用して Groovy コードを実行することもできます。ただし、Scripting Module では、DataSense サポート、ユーザーインターフェースサポート、各クラスで使用可能なメソッドの視覚的補助、オートコンプリートなどは提供されません。​[「Java インテグレーション」](https://docs.mulesoft.com/mule-runtime/latest/)​を参照してください。 ## [](#関連情報)関連情報 - [クラスのインスタンスの作成](https://docs.mulesoft.com/jp/java-module/1.2/java-create-instance) - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/1.2/java-invoke-method) - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/1.2/java-instanceof) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/1.2/java-throwable) - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/1.2/java-reference) - [Java Module の引数変換](https://docs.mulesoft.com/jp/java-module/1.2/java-argument-transformation) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module 1.2 リファレンス Java Module は、Java コードの呼び出しに使用します。 リリースノート: [Java Module リリースノート](https://docs.mulesoft.com/jp/release-notes/connector/java-module) ## [](#設定)設定 * * * ### [](#config)デフォルト設定 デフォルト設定 #### [](#パラメーター)パラメーター
名前 型 説明 デフォルト値 必須

Name (名前)

String (文字列)

この設定の名前。コネクタはこの名前の設定を参照します。

x

## [](#操作)操作 - [Invoke](#invoke) - [Invoke Static](#invokeStatic) - [New](#new) - [Validate Type](#validateType) ### [](#invoke)Invoke `` インスタンスで引数を指定したメソッドを呼び出します。呼び出すメソッドの識別子にクラス名とメソッド名が含まれます。メソッドは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`Class org.bar.Me`​ に属する ​`public String echo(String msg)`​ という署名を指定した ​`echo`​ メソッドを呼び出す場合、このメソッドの識別子は ​`echo(String)`​ になります。 #### [](#パラメーター-2)パラメーター
名前 型 説明 デフォルト値 必須

Instance (インスタンス)

Any (任意)

メソッドを呼び出すインスタンス。

x

Args (引数)

Object (オブジェクト)

メソッドを呼び出すために使用する引数。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Method (メソッド)

String (文字列)

メソッド名とその引数の型を含むメソッド署名を表します。たとえば、​public String log(String msg, boolean verbose)​ という署名を指定したメソッドの場合、このメソッドの識別子は ​log(String, boolean)​ になります

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

#### [](#出力)出力

型

Any (任意)

#### [](#スロー)スロー - JAVA:ARGUMENTS\_MISMATCH - JAVA:CLASS\_NOT\_FOUND - JAVA:INVOCATION - JAVA:NO\_SUCH\_METHOD - JAVA:WRONG\_INSTANCE\_CLASS ### [](#invokeStatic)Invoke Static `` ユーザーが、引数を指定した静的メソッドを呼び出せる操作です。呼び出されるメソッドの識別子にクラス名とメソッド名が含まれます。メソッドは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`Class org.bar.Me`​ に属する ​`public static String echo(String msg)`​ という署名を指定した静的メソッド ​`echo`​ を呼び出す場合、このメソッドの識別子は ​`echo(String)`​ になります。 #### [](#パラメーター-3)パラメーター
名前 型 説明 デフォルト値 必須

Args (引数)

Object (オブジェクト)

指定したメソッドを呼び出すために使用する引数。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Method (メソッド)

String (文字列)

メソッド名とその引数の型を含むメソッド署名を表します。たとえば、​public static String log(String msg, boolean verbose)​ という署名を指定したメソッドの場合、このメソッドの識別子は ​log(String, boolean)​ になります。

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

#### [](#出力-2)出力

型

Any (任意)

#### [](#スロー-2)スロー - JAVA:CLASS\_NOT\_FOUND - JAVA:ARGUMENTS\_MISMATCH - JAVA:INVOCATION - JAVA:WRONG\_INSTANCE\_CLASS - JAVA:NO\_SUCH\_METHOD ### [](#new)New `` クラスの新しいインスタンスを作成します。 コンストラクターの識別子にクラス名とコンストラクター名が含まれます。コンストラクターは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`org.bar.Me`​ に属する ​`Me(String name, int age)`​ というコンストラクターを呼び出す場合、このメソッドの識別子は ​`Me(String,int)`​ になります。 #### [](#パラメーター-4)パラメーター
名前 型 説明 デフォルト値 必須

Args (引数)

Object (オブジェクト)

指定したコンストラクターを呼び出すために使用する引数。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Constructor (コンストラクター)

String (文字列)

名前とその引数の型を含むコンストラクター署名を表します。たとえば、​public Me(String name, Integer age)​ という署名を指定したコンストラクターの場合、このメソッドの識別子は ​Me(String, Integer)​ になります。

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

#### [](#出力-3)出力

型

Any (任意)

#### [](#スロー-3)スロー - JAVA:ARGUMENTS\_MISMATCH - JAVA:CLASS\_NOT\_FOUND - JAVA:NO\_SUCH\_CONSTRUCTOR - JAVA:NOT\_INSTANTIABLE\_TYPE ### [](#validateType)Validate Type `` インスタンスが ​`instanceof`​ クラスであることを検証します。 #### [](#パラメーター-5)パラメーター
名前 型 説明 デフォルト値 必須

Class (クラス)

String (文字列)

Instance (インスタンス)

Any (任意)

型がクラスの instanceof と想定されるオブジェクト。

x

Accept Subtypes (サブタイプの受け入れ)

Boolean (ブール)

クラスのサブタイプを受け入れるかどうか、あるいはインスタンスがまったく同じクラスでなければならないかどうか。

true

#### [](#スロー-4)スロー - JAVA:CLASS\_NOT\_FOUND - JAVA:WRONG\_INSTANCE\_CLASS ## [](#関連情報)関連情報 [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module 2.0 リリースノート: [Java Module リリースノート](https://docs.mulesoft.com/jp/release-notes/connector/java-module)​ Exchange: [Java Module](https://www.mulesoft.com/exchange/org.mule.module/mule-java-module/) Mule 4 は、次の目的で構築されています。 - カスタムコードの必要性を最小限に抑える。 - Java に関する知識や理解を不要にする。 ただし、次のような一部の高度なユースケースでは、カスタム Java コードとのインテグレーションが必要です。 - ライブラリ (税額計算ライブラリなど) を再利用する場合。 - 組織の標準である正規オブジェクトモデルを再利用する場合。 - Java を使用してカスタムロジックを実行する場合。 Mule 3 では、Java クラスのインスタンスを作成して Java メソッドを実行する場合、MEL が架け橋になります。Mule 4 では、MEL の代わりに DataWeave という関数型言語が導入され、Java との相互作用が変化しています。 関数型言語は入力引数に副次的な影響を及ぼさないため、DataWeave がランダムなオブジェクトインスタンスでランダムなインスタンスメソッドを実行するのは理にかなったことではありません。 そのため、純粋な DataWeave では、Java Module を使用しない静的 Java メソッドのみのコールがサポートされています。 ## [](#java-module-と-scripting-module)Java Module と Scripting Module Java Module を使用することも、​[Scripting Module](https://docs.mulesoft.com/jp/scripting-module/latest/)​ を使用して Groovy コードを実行することもできます。ただし、Scripting Module では、DataSense サポート、ユーザーインターフェースサポート、各クラスで使用可能なメソッドの視覚的補助、オートコンプリートなどは提供されません。​[「Java インテグレーション」](https://docs.mulesoft.com/mule-runtime/latest/)​を参照してください。 ## [](#関連情報)関連情報 - [クラスのインスタンスの作成](https://docs.mulesoft.com/jp/java-module/latest/java-create-instance) - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/latest/java-invoke-method) - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/latest/java-instanceof) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/latest/java-throwable) - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/latest/java-reference) - [Java Module の引数変換](https://docs.mulesoft.com/jp/java-module/latest/java-argument-transformation) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module 2.0 リファレンス Java Module は、Java コードの呼び出しに使用します。 リリースノート: [Java Module リリースノート](https://docs.mulesoft.com/jp/release-notes/connector/java-module) ## [](#設定)設定 * * * ### [](#config)デフォルト設定 デフォルト設定 #### [](#パラメーター)パラメーター
名前 型 説明 デフォルト値 必須

Name (名前)

String (文字列)

この設定の名前。コネクタはこの名前の設定を参照します。

x

Name (名前)

String (文字列)

他のコンポーネント内のこの要素を参照するために使用するこの要素の識別子。

x

## [](#操作)操作 - [Invoke](#invoke) - [Invoke Static](#invokeStatic) - [New](#new) - [Validate Type](#validateType) ### [](#invoke)Invoke `` インスタンスで引数を指定したメソッドを呼び出します。呼び出すメソッドの識別子にクラス名とメソッド名が含まれます。メソッドは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`Class org.bar.Me`​ に属する ​`public String echo(String msg)`​ という署名を指定した ​`echo`​ メソッドを呼び出す場合、このメソッドの識別子は ​`echo(String)`​ になります。 #### [](#パラメーター-2)パラメーター
名前 型 説明 デフォルト値 必須

Instance (インスタンス)

Any (任意)

メソッドを呼び出すインスタンス。

x

Args (引数)

Object (オブジェクト)

メソッドを呼び出すために使用する引数。

この項目は、キーがメソッド引数の名前で、値が対応する引数値であるマップである必要があります。

たとえば、署名 ​public String echo(String msg, String volume)​ 付きのメソッド ​echo​ がある場合、​Args​ の使用可能な値は ​[{ msg : 'This is a message to echo', volume : 'Loud' }]​ になります。これらの引数名を使用するには、​-parameters​ を使用して Java クラスをコンパイルする必要があります。それ以外の場合、引数の正規名 (​[{ arg0 : 'This is a message to echo', arg1 : 'Loud' }]​) を使用する必要があります。引数の正規名は、​-parameters​ でソースコードがコンパイルされていても、常に使用できます。

Output Mime Type (出力 MIME タイプ)

String (文字列)

この呼び出しで出力されるペイロードの MIME タイプ。

Output Encoding (出力エンコード)

String (文字列)

この呼び出しで出力されるペイロードのエンコード。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Method (メソッド)

String (文字列)

メソッド名とその引数の型を含むメソッド署名を表します。たとえば、​public String log(String msg, boolean verbose)​ という署名を指定したメソッドの場合、このメソッドの識別子は ​log(String, boolean)​ になります

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

エラーのマッピング

エラーのマッピングのセット。

#### [](#出力)出力

Type (型)

Any (任意)

#### [](#スロー)スロー - JAVA:ARGUMENTS\_MISMATCH - JAVA:CLASS\_NOT\_FOUND - JAVA:INVOCATION - JAVA:NO\_SUCH\_METHOD - JAVA:WRONG\_INSTANCE\_CLASS ### [](#invokeStatic)Invoke Static `` ユーザーが、引数を指定した静的メソッドを呼び出せる操作です。呼び出されるメソッドの識別子にクラス名とメソッド名が含まれます。メソッドは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`Class org.bar.Me`​ に属する ​`public static String echo(String msg)`​ という署名を指定した静的メソッド ​`echo`​ を呼び出す場合、このメソッドの識別子は ​`echo(String)`​ になります。 #### [](#パラメーター-3)パラメーター
名前 型 説明 デフォルト値 必須

Args (引数)

Object (オブジェクト)

メソッドを呼び出すために使用する引数。

この項目は、キーがメソッド引数の名前で、値が対応する引数値であるマップである必要があります。

たとえば、署名 ​public String echo(String msg, String volume)​ 付きのメソッド ​echo​ がある場合、​Args​ の使用可能な値は ​[{ msg : 'This is a message to echo', volume : 'Loud' }]​ になります。これらの引数名を使用するには、​-parameters​ を使用して Java クラスをコンパイルする必要があります。それ以外の場合、引数の正規名 (​[{ arg0 : 'This is a message to echo', arg1 : 'Loud' }]​) を使用する必要があります。引数の正規名は、​-parameters​ でソースコードがコンパイルされていても、常に使用できます。

Output Mime Type (出力 MIME タイプ)

String (文字列)

この呼び出しで出力されるペイロードの MIME タイプ。

Output Encoding (出力エンコード)

String (文字列)

この呼び出しで出力されるペイロードのエンコード。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Method (メソッド)

String (文字列)

メソッド名とその引数の型を含むメソッド署名を表します。たとえば、​public static String log(String msg, boolean verbose)​ という署名を指定したメソッドの場合、このメソッドの識別子は ​log(String, boolean)​ になります。

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

エラーのマッピング

エラーのマッピングのセット。

#### [](#出力-2)出力

Type (型)

Any (任意)

#### [](#スロー-2)スロー - JAVA:CLASS\_NOT\_FOUND - JAVA:ARGUMENTS\_MISMATCH - JAVA:INVOCATION - JAVA:NO\_SUCH\_METHOD ### [](#new)New `` クラスの新しいインスタンスを作成します。 コンストラクターの識別子にクラス名とコンストラクター名が含まれます。コンストラクターは、各パラメーターの型を含む署名の詳しい説明です。 たとえば、​`org.bar.Me`​ クラスに属する ​`Me(String name, int age)`​ というコンストラクターを呼び出す場合、このメソッドの識別子は ​`Me(String,int)`​ になります。 #### [](#パラメーター-4)パラメーター
名前 型 説明 デフォルト値 必須

Args (引数)

Object (オブジェクト)

指定したコンストラクターを呼び出すために使用する引数。

Class (クラス)

String (文字列)

参照先のメソッドを含むクラスの完全修飾名を表します。

x

Constructor (コンストラクター)

String (文字列)

名前とその引数の型を含むコンストラクター署名を表します。たとえば、​public Me(String name, Integer age)​ という署名を指定したコンストラクターの場合、このメソッドの識別子は ​Me(String, Integer)​ になります。

x

Target Variable (対象変数)

String (文字列)

操作の出力を配置する変数の名前。

Target Value (対象値)

String (文字列)

操作の出力に対して評価する式。この式の出力は対象変数に保存されます。

#[payload]

エラーのマッピング

エラーのマッピングのセット。

#### [](#出力-3)出力

Type (型)

Any (任意)

#### [](#スロー-3)スロー - JAVA:ARGUMENTS\_MISMATCH - JAVA:CLASS\_NOT\_FOUND - JAVA:NO\_SUCH\_CONSTRUCTOR - JAVA:NOT\_INSTANTIABLE\_TYPE ### [](#validateType)Validate Type `` インスタンスが ​`instanceof`​ クラスであることを検証します。 #### [](#パラメーター-5)パラメーター
名前 型 説明 デフォルト値 必須

Class (クラス)

String (文字列)

Instance (インスタンス)

Any (任意)

型がクラスの instanceof と想定されるオブジェクト。

x

Accept Subtypes (サブタイプの受け入れ)

Boolean (ブール)

クラスのサブタイプを受け入れるかどうか、あるいはインスタンスがまったく同じクラスでなければならないかどうか。

true

エラーのマッピング

エラーのマッピングのセット。

#### [](#スロー-4)スロー - JAVA:CLASS\_NOT\_FOUND - JAVA:WRONG\_INSTANCE\_CLASS ## [](#型)型 ### [](#ErrorMapping)エラーのマッピング
項目 型 説明 デフォルト値 必須

Source (ソース)

Enumeration (列挙)。次のいずれかになります。

  • ANY

  • REDELIVERY_EXHAUSTED

  • TRANSFORMATION

  • EXPRESSION

  • SECURITY

  • CLIENT_SECURITY

  • SERVER_SECURITY

  • ROUTING

  • CONNECTIVITY

  • RETRY_EXHAUSTED

  • TIMEOUT

エラーのマッピング元。

Target (対象)

String (文字列)

エラーのマッピング先。

x

## [](#関連情報)関連情報 [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module の XML と Maven のサポート XML で Mule アプリケーションを手動でコーディングすることもできますが、Anypoint Studio を使用した方が効率的です。 Anypoint Studio の XML エディターまたはテキストエディターから Mule Runtime Engine (Mule) アプリケーションを手動でコーディングする場合、参照ステートメントを XML Mule フローと Apache Maven ​`pom.xml`​ ファイルの両方に追加することで、アプリケーションでコネクタにアクセスできます。 コネクタを Studio に追加すると、Studio は自動的に XML コードにコネクタの名前空間およびスキーマの場所を入力します。さらに、​`pom.xml`​ ファイルに連動関係を追加します。 ## [](#コネクタの名前空間の追加)コネクタの名前空間の追加 次のコードを設定 XML のヘッダーの ​``​ タグ内に貼り付けます。 ```xml http://www.mulesoft.org/schema/mule/java http://www.mulesoft.org/schema/mule/java/current/mule-java.xsd ``` 次の例は、​``​ XML ブロック内に名前空間ステートメントが配置される方法を示しています。 ```xml ``` ## [](#pom-ファイルの連動関係の追加)POM ファイルの連動関係の追加 Apache Maven ​`pom.xml`​ ファイルは Anypoint Studio によって生成され、Mule アプリケーションの連動関係が含まれます。Mule アプリケーションを手動でコーディングする場合、次の XML スニペットを ​`pom.xml`​ ファイルに含めてこのコネクタにアクセスできるようにします: ```xml org.mule.module mule-java-module x.x.x mule-plugin ``` `x.x.x`​ を使用しているコネクタに対応するバージョンに置き換えます。 最新の ​`pom.xml`​ ファイル情報を取得する手順は、次のとおりです。 1. [Anypoint Exchange](https://www.mulesoft.com/exchange/)​ に移動します。 2. Exchange で、​**\[Login (ログイン)\]**​ をクリックし、Anypoint Platform のユーザー名とパスワードを指定します。 3. Exchange で、「​`java module`​」を検索します。 4. コネクタを選択します。 5. 画面の右上付近にある ​**\[Dependency Snippets (連動関係スニペット)\]**​ をクリックします。 ## [](#関連情報)関連情報 - [Anypoint Connector の概要](https://docs.mulesoft.com/connectors/introduction/introduction-to-anypoint-connectors) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module の XML と Maven のサポート XML で Mule アプリケーションを手動でコーディングすることもできますが、Anypoint Studio を使用した方が効率的です。 Anypoint Studio の XML エディターまたはテキストエディターから Mule Runtime Engine (Mule) アプリケーションを手動でコーディングする場合、参照ステートメントを XML Mule フローと Apache Maven ​`pom.xml`​ ファイルの両方に追加することで、アプリケーションでコネクタにアクセスできます。 コネクタを Studio に追加すると、Studio は自動的に XML コードにコネクタの名前空間およびスキーマの場所を入力します。さらに、​`pom.xml`​ ファイルに連動関係を追加します。 ## [](#コネクタの名前空間の追加)コネクタの名前空間の追加 次のコードを設定 XML のヘッダーの ​``​ タグ内に貼り付けます。 ```xml http://www.mulesoft.org/schema/mule/java http://www.mulesoft.org/schema/mule/java/current/mule-java.xsd ``` 次の例は、​``​ XML ブロック内に名前空間ステートメントが配置される方法を示しています。 ```xml ``` ## [](#pom-ファイルの連動関係の追加)POM ファイルの連動関係の追加 Apache Maven ​`pom.xml`​ ファイルは Anypoint Studio によって生成され、Mule アプリケーションの連動関係が含まれます。Mule アプリケーションを手動でコーディングする場合、次の XML スニペットを ​`pom.xml`​ ファイルに含めてこのコネクタにアクセスできるようにします: ```xml org.mule.module mule-java-module x.x.x mule-plugin ``` `x.x.x`​ を使用しているコネクタに対応するバージョンに置き換えます。 最新の ​`pom.xml`​ ファイル情報を取得する手順は、次のとおりです。 1. [Anypoint Exchange](https://www.mulesoft.com/exchange/)​ に移動します。 2. Exchange で、​**\[Login (ログイン)\]**​ をクリックし、Anypoint Platform のユーザー名とパスワードを指定します。 3. Exchange で、「​`java module`​」を検索します。 4. コネクタを選択します。 5. 画面の右上付近にある ​**\[Dependency Snippets (連動関係スニペット)\]**​ をクリックします。 ## [](#関連情報)関連情報 - [Anypoint Connector の概要](https://docs.mulesoft.com/connectors/introduction/introduction-to-anypoint-connectors) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module のトラブルシューティング Java Module のトラブルシューティングを行うには、冗長ログの有効化と、スローされる一般的なメッセージの解釈に関する情報を理解しておきます。 ## [](#冗長ログの有効化)冗長ログの有効化 アプリケーションと Java Module のやりとりが失敗する理由の理解を深めるには、モジュールの冗長ログを一時的に有効にします。 Mule アプリケーションのパフォーマンスに影響するため、トラブルシューティングが完了したら、必ず拡張された冗長性を無効にしてください。 設定ファイルで冗長ログを有効にする手順は、次のとおりです。 1. Anypoint Studio で ​**\[Package Explorer\]**​ ビューに移動します。 2. アプリケーションのプロジェクト名を開きます。 3. `src/main/resources`​ パスフォルダーを開きます。 4. フォルダー内の ​`log4j2.xml`​ ファイルを開きます。 5. ``​ タグ内に ​``​ タグを追加します。 ```xml ... ... ``` 6. アプリケーションの変更を保存します。 7. Anypoint Studio の ​**Package Explorer**​ でプロジェクト名をクリックし、​**\[Run (実行)\]**​ > ​**\[Run As (別のユーザーとして実行)\]**​ > ​**\[Mule Application (Mule アプリケーション)\]**​ をクリックします。 . ## [](#一般的なスローを理解する)一般的なスローを理解する ここでは、一般的なスローメッセージとその解決方法を示します。 - JAVA:ARGUMENTS\_MISMATCH いずれかの引数の種別が無効か、いずれかの引数がないか、指定されている引数が多すぎます。 - JAVA:CLASS\_NOT\_FOUND 指定された名前のクラスの定義が見つかりませんでした。 - JAVA:INVOCATION メソッドまたはコンストラクターの呼び出し中にエラーが発生しました。 - JAVA:NO\_SUCH\_METHOD 指定されたメソッドが見つかりませんでした。 - JAVA:WRONG\_INSTANCE\_CLASS 指定されたインスタンスのクラスが想定されるクラスと一致しません。 - JAVA:NO\_SUCH\_CONSTRUCTOR クラスに一致するコンストラクターがないか、そのコンストラクターを参照できません。 - JAVA:NOT\_INSTANTIABLE\_TYPE 指定されたクラスが抽象クラスまたはインターフェースです。 ## [](#関連情報)関連情報 - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/1.2/java-reference) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) - [Known Issues](https://help.salesforce.com/s/issues) # Java Module のトラブルシューティング Java Module のトラブルシューティングを行うには、冗長ログの有効化と、スローされる一般的なメッセージの解釈に関する情報を理解しておきます。 ## [](#冗長ログの有効化)冗長ログの有効化 アプリケーションと Java Module のやりとりが失敗する理由の理解を深めるには、モジュールの冗長ログを一時的に有効にします。 Mule アプリケーションのパフォーマンスに影響するため、トラブルシューティングが完了したら、必ず拡張された冗長性を無効にしてください。 設定ファイルで冗長ログを有効にする手順は、次のとおりです。 1. Anypoint Studio で ​**\[Package Explorer\]**​ ビューに移動します。 2. アプリケーションのプロジェクト名を開きます。 3. `src/main/resources`​ パスフォルダーを開きます。 4. フォルダー内の ​`log4j2.xml`​ ファイルを開きます。 5. ``​ タグ内に ​``​ タグを追加します。 ```xml ... ... ``` 6. アプリケーションの変更を保存します。 7. Anypoint Studio の ​**Package Explorer**​ でプロジェクト名をクリックし、​**\[Run (実行)\]**​ > ​**\[Run As (別のユーザーとして実行)\]**​ > ​**\[Mule Application (Mule アプリケーション)\]**​ をクリックします。 . ## [](#一般的なスローを理解する)一般的なスローを理解する ここでは、一般的なスローメッセージとその解決方法を示します。 - JAVA:ARGUMENTS\_MISMATCH いずれかの引数の種別が無効か、いずれかの引数がないか、指定されている引数が多すぎます。 - JAVA:CLASS\_NOT\_FOUND 指定された名前のクラスの定義が見つかりませんでした。 - JAVA:INVOCATION メソッドまたはコンストラクターの呼び出し中にエラーが発生しました。 - JAVA:NO\_SUCH\_METHOD 指定されたメソッドが見つかりませんでした。 - JAVA:WRONG\_INSTANCE\_CLASS 指定されたインスタンスのクラスが想定されるクラスと一致しません。 - JAVA:NO\_SUCH\_CONSTRUCTOR クラスに一致するコンストラクターがないか、そのコンストラクターを参照できません。 - JAVA:NOT\_INSTANTIABLE\_TYPE 指定されたクラスが抽象クラスまたはインターフェースです。 ## [](#関連情報)関連情報 - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/latest/java-reference) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) - [Known Issues](https://help.salesforce.com/s/issues) # Java Module のバージョン 2.x へのアップグレードおよび移行 Java Module をバージョン 2.x にアップグレードします。 ## [](#サポートされているアップグレードパス)サポートされているアップグレードパス
開始バージョン 終了バージョン

1.x

2.x

## [](#このリリースでの変更)このリリースでの変更 Java Module 2.0 には次の変更内容が含まれます。 - Java Module (およびその連動関係) はコンパイル可能になり、Java 17 とのみ互換性が確保されるようになりました。 - 最新の開発手法に一致させ、サポートされるセキュアなライブラリとの互換性を引き続き確保するため、Java Module は Spring 5.x から Spring 6.x にアップグレードされます。 ## [](#アップグレード前提条件)アップグレード前提条件 アップグレードを実行する前に、復元する必要がある場合に備えて、ファイル、データ、および設定のバックアップを作成する必要があります。 ## [](#アップグレード手順)アップグレード手順 以下の手順でアップグレードを実行します。 1. Anypoint Studio で、プロジェクトを右クリックし、​**\[Manage Dependencies (連動関係の管理)\]**​ > ​**\[Manage Modules (モジュールを管理)\]**​ を選択します。 2. `[Java Module - Mule 4]`​ を選択し、​**\[Update version (バージョンを更新)\]**​ をクリックします。 3. **\[Apply and Close (適用して閉じる)\]**​ をクリックします。 4. Mule プロジェクトの ​`pom.xml`​ ファイルで Java Module の連動関係バージョンが ​`2.x`​ であることを確認します。 または、Mule プロジェクトの ​`pom.xml`​ ファイルで Java Module 連動関係のバージョンを手動で更新したり、更新されたモジュールをプロジェクトに単に追加したりできます。 ### [](#アップグレードを確認する)アップグレードを確認する コネクタをアップグレードしたら、次の手順に従ってアップグレードを検証します。 1. Studio の ​**\[Problems (問題)\]**​ または ​**\[Console (コンソール)\]**​ ビューでエラーがないことを確認します。 2. プロジェクトの ​`pom.xml`​ ファイルに問題がないことを確認します。 3. 接続をテストして、操作が機能することを確認します。 ## [](#トラブルシューティング)トラブルシューティング パラメーターのキャッシュおよびメタデータのキャッシュで問題がある場合、Anypoint Studio の再起動をお試しください。 ### [](#アップグレードの復元)アップグレードの復元 前のバージョンの Java Module に戻す必要がある場合、プロジェクトの ​`pom.xml`​ で Java Module の連動関係バージョン ​`2.x`​ を前のバージョンに変更します。 Anypoint Studio でプロジェクトの ​`pom.xml`​ を更新する必要があります。 ## [](#関連情報)関連情報 - [Anypoint Connector の概要](https://docs.mulesoft.com/connectors/introduction/introduction-to-anypoint-connectors) - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/latest/java-reference) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module の例 Java Module を最大限活用するには、次のモジュール操作の設定例を参照してください。 - [クラスのインスタンスの作成](https://docs.mulesoft.com/jp/java-module/1.2/java-create-instance) Java クラスのインスタンスを作成するように ​**New**​ 操作を設定します。 - [Java メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/1.2/java-invoke-method) Java メソッドを呼び出すように ​**Invoke**​ および ​**Invoke static**​ 操作を設定します。 - [引数の変換](https://docs.mulesoft.com/jp/java-module/1.2/java-argument-transformation) Java 呼び出しに指定された引数が Java メソッドが想定する型と完全に一致しない場合でも、その引数を変換するように Java Module を設定します。 - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/1.2/java-instanceof) オブジェクトがクラスのインスタンスかどうかをテストするように ​**Validate type**​ 操作を設定します。 - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/1.2/java-throwable) Throwable インスタンスで DataWeave 関数を使用するように Java Module を設定します。 ## [](#関連情報)関連情報 - [Anypoint Connector の概要](https://docs.mulesoft.com/connectors/introduction/introduction-to-anypoint-connectors) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Java Module の例 Java Module を最大限活用するには、次のモジュール操作の設定例を参照してください。 - [クラスのインスタンスの作成](https://docs.mulesoft.com/jp/java-module/latest/java-create-instance) Java クラスのインスタンスを作成するように ​**New**​ 操作を設定します。 - [Java メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/latest/java-invoke-method) Java メソッドを呼び出すように ​**Invoke**​ および ​**Invoke static**​ 操作を設定します。 - [引数の変換](https://docs.mulesoft.com/jp/java-module/latest/java-argument-transformation) Java 呼び出しに指定された引数が Java メソッドが想定する型と完全に一致しない場合でも、その引数を変換するように Java Module を設定します。 - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/latest/java-instanceof) オブジェクトがクラスのインスタンスかどうかをテストするように ​**Validate type**​ 操作を設定します。 - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/latest/java-throwable) Throwable インスタンスで DataWeave 関数を使用するように Java Module を設定します。 ## [](#関連情報)関連情報 - [Anypoint Connector の概要](https://docs.mulesoft.com/connectors/introduction/introduction-to-anypoint-connectors) - [MuleSoft ヘルプセンター](https://help.mulesoft.com) # Throwable の処理 Java Module は、Throwable インスタンスに有益な DataWeave 関数を公開します。 (Java では、Throwable は ​`throw`​ ステートメントです)。 これらの関数は DataWeave バージョン 1.2.0 以降で使用可能になりました。 ## [](#原因の確認)原因の確認 `isCausedBy`​ 関数を使用して、Throwable の原因が特定の種別の例外であったのかどうかを確認できます。これは、​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept)​にロジックを追加するときに特に役立ちます。 ```java package com.me; public class TaxCalculator { public Double calculateTax(Double price) { if (price == null) { throw new NullPointerException("Must provide a value for price"); } if (price < 0) { throw new IllegalArgumentException("Price must be a non-negative value, but was: " + price); } return price * 0.21; } } ``` `calculateTax(Double price)`​ メソッドは、​`IllegalArgumentException`​ および ​`NullPointerException`​ 例外を宣言します。 次のコード例は、​[`invoke`​ 操作](https://docs.mulesoft.com/jp/java-module/1.2/java-invoke-method)​の実行中にエラーをスローするフローの部分をリストします。 `calculateTax(Double price)`​ メソッドの失敗した呼び出し中に発生した Java 例外を確認するには、エラーハンドラーで ​`isCausedBy`​ 関数を使用して、ケースごとに異なるロジックを追加します。 ```xml #[{price: payload.price}] ``` ## [](#根本原因の取得)根本原因の取得 `getRootCause`​ 関数は、例外のラップとは関係のない Throwable の根本原因を取得します。 次の例では、税額計算のエラーはすべて、Throwable の根本原因を取得する ​`handle(Throwable)`​ メソッドが含まれる ​`FailureHandler`​ クラスで処理されます。それを可能にするため、​`getRootCause`​ 関数を使用して、根本原因を ​`handle(Throwable)`​ メソッドに引数として渡すことができます。 ```xml #[{price: payload.price}] #[{cause: Java::getRootCause(error.cause)}] ``` ## [](#関連情報)関連情報 - [Mule エラーについて](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept) # Throwable の処理 Java Module は、Throwable インスタンスに有益な DataWeave 関数を公開します。 (Java では、Throwable は ​`throw`​ ステートメントです)。 これらの関数は DataWeave バージョン 1.2.0 以降で使用可能になりました。 ## [](#原因の確認)原因の確認 `isCausedBy`​ 関数を使用して、Throwable の原因が特定の種別の例外であったのかどうかを確認できます。これは、​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept)​にロジックを追加するときに特に役立ちます。 ```java package com.me; public class TaxCalculator { public Double calculateTax(Double price) { if (price == null) { throw new NullPointerException("Must provide a value for price"); } if (price < 0) { throw new IllegalArgumentException("Price must be a non-negative value, but was: " + price); } return price * 0.21; } } ``` `calculateTax(Double price)`​ メソッドは、​`IllegalArgumentException`​ および ​`NullPointerException`​ 例外を宣言します。 次のコード例は、​[`invoke`​ 操作](https://docs.mulesoft.com/jp/java-module/latest/java-invoke-method)​の実行中にエラーをスローするフローの部分をリストします。 `calculateTax(Double price)`​ メソッドの失敗した呼び出し中に発生した Java 例外を確認するには、エラーハンドラーで ​`isCausedBy`​ 関数を使用して、ケースごとに異なるロジックを追加します。 ```xml #[{price: payload.price}] ``` ## [](#根本原因の取得)根本原因の取得 `getRootCause`​ 関数は、例外のラップとは関係のない Throwable の根本原因を取得します。 次の例では、税額計算のエラーはすべて、Throwable の根本原因を取得する ​`handle(Throwable)`​ メソッドが含まれる ​`FailureHandler`​ クラスで処理されます。それを可能にするため、​`getRootCause`​ 関数を使用して、根本原因を ​`handle(Throwable)`​ メソッドに引数として渡すことができます。 ```xml #[{price: payload.price}] #[{cause: Java::getRootCause(error.cause)}] ``` ## [](#関連情報)関連情報 - [Mule エラーについて](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept) # クラスのインスタンスのテスト Java Module には、オブジェクトがクラスのインスタンスかどうかをテストする ​`Validate type`​ 操作があります。この操作は、クラスのサブタイプを受け入れるか拒否するように設定することもできます。​`true`​ の場合、操作はペイロードを変更せず、フローは実行を続行します。それ以外の場合、操作はエラーをスローしてフローを中断し、制御を​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept#error-handlers)​に渡します。 ## [](#validate-type-操作)Validate Type 操作 この例は、​`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; } } ``` この例は、​`Person`​ クラスを拡張する ​`Employee`​ クラスを定義します。 ```java 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`​ 操作](https://docs.mulesoft.com/jp/java-module/1.2/java-create-instance)​をコールして ​`Employee`​ オブジェクトを作成し、​`jane`​ 変数内に置きます。 ```xml #[{ name: 'Jane Avi', age: 28, company: MuleSoft }] ``` オブジェクトが ​`Employee`​ クラスに属する ​`vars.jane`​ に保存されているかどうかを確認するには、​`Validate type`​ 操作を使用します。 ```xml ``` この場合、オブジェクトは ​`Employee`​ のインスタンスであるため、フローは通常どおり実行を続行し、ペイロードは変更されません。 ### [](#サブタイプ-継承-の確認)サブタイプ (継承) の確認 `Validate type`​ 操作には ​`Accept subtypes`​ パラメーターがあります。このパラメーターは、操作がクラスのすべてのサブクラスを受け入れるかどうかを示します。 このパラメーターには ​`true`​、​`false`​、または式を指定可能で、省略した場合はデフォルトで ​`true`​ になります。 引き続き前記の例を使用すると、​`vars.jane`​ 内のオブジェクトは ​`Person`​ クラスを拡張する ​`Employee`​ クラスに属します。つまり、​`Employee`​ は ​`Person`​ のサブタイプになります。そのため、この例を実行すると ​`true`​ に解決され、フローは通常どおり実行されます。 ```xml ```
Accept subtypes​ パラメーターを省略すると、この値はデフォルトで ​true​ になります。
前のコードは次と同等です。 ```xml ``` ただし、​`Accept subtypes`​ を ​`false`​ に設定するとします。 ```xml ``` 実行中、操作はエラーをスローしてフローを中断し、制御を​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept)​に渡します。 ## [](#dataweave-での-validate-type-関数)DataWeave での Validate Type 関数 この例では、Java Module で、オブジェクトがクラスのインスタンスの場合に ​`true`​ または ​`false`​ を返す DataWeave ​`isInstanceOf()`​ 関数を提供します。​`Validate type`​ 操作とは異なり、​`false`​ に評価されたときにエラーはスローされません。 ```xml ``` ## [](#関連情報)関連情報 - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/1.2/java-invoke-method) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/1.2/java-throwable) # クラスのインスタンスのテスト Java Module には、オブジェクトがクラスのインスタンスかどうかをテストする ​`Validate type`​ 操作があります。この操作は、クラスのサブタイプを受け入れるか拒否するように設定することもできます。​`true`​ の場合、操作はペイロードを変更せず、フローは実行を続行します。それ以外の場合、操作はエラーをスローしてフローを中断し、制御を​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept#error-handlers)​に渡します。 ## [](#validate-type-操作)Validate Type 操作 この例は、​`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; } } ``` この例は、​`Person`​ クラスを拡張する ​`Employee`​ クラスを定義します。 ```java 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`​ 操作](https://docs.mulesoft.com/jp/java-module/latest/java-create-instance)​をコールして ​`Employee`​ オブジェクトを作成し、​`jane`​ 変数内に置きます。 ```xml #[{ name: 'Jane Avi', age: 28, company: MuleSoft }] ``` オブジェクトが ​`Employee`​ クラスに属する ​`vars.jane`​ に保存されているかどうかを確認するには、​`Validate type`​ 操作を使用します。 ```xml ``` この場合、オブジェクトは ​`Employee`​ のインスタンスであるため、フローは通常どおり実行を続行し、ペイロードは変更されません。 ### [](#サブタイプ-継承-の確認)サブタイプ (継承) の確認 `Validate type`​ 操作には ​`Accept subtypes`​ パラメーターがあります。このパラメーターは、操作がクラスのすべてのサブクラスを受け入れるかどうかを示します。 このパラメーターには ​`true`​、​`false`​、または式を指定可能で、省略した場合はデフォルトで ​`true`​ になります。 引き続き前記の例を使用すると、​`vars.jane`​ 内のオブジェクトは ​`Person`​ クラスを拡張する ​`Employee`​ クラスに属します。つまり、​`Employee`​ は ​`Person`​ のサブタイプになります。そのため、この例を実行すると ​`true`​ に解決され、フローは通常どおり実行されます。 ```xml ```
[Accept subtypes (サブタイプの受け入れ)]​ パラメーターを省略すると、その値はデフォルトで ​true​ になります。
前のコードは次と同等です。 ```xml ``` ただし、​`Accept subtypes`​ を ​`false`​ に設定するとします。 ```xml ``` 実行中、操作はエラーをスローしてフローを中断し、制御を​[エラーハンドラー](https://docs.mulesoft.com/mule-runtime/latest/mule-error-concept)​に渡します。 ## [](#dataweave-での-validate-type-関数)DataWeave での Validate Type 関数 この例では、Java Module で、オブジェクトがクラスのインスタンスの場合に ​`true`​ または ​`false`​ を返す DataWeave ​`isInstanceOf()`​ 関数を提供します。​`Validate type`​ 操作とは異なり、​`false`​ に評価されたときにエラーはスローされません。 ```xml ``` ## [](#関連情報)関連情報 - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/latest/java-invoke-method) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/latest/java-throwable) # クラスのインスタンスの作成 ## [](#java-コンストラクターのコール)Java コンストラクターのコール このページの例は、​`com.me`​ パッケージに属する ​`Person`​ Java クラスに基づいています。 ```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`​ のインスタンスを作成する方法を示しています。 ```xml ``` パラメーターが必要なコンストラクターを使用して ​`Person`​ オブジェクトを作成する方法を次に示します。 ```xml #[{ name: 'John Doe', age: 30 }] ``` コンストラクターのパラメーターでは、​`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-サポート)Studio での DataSense サポート Java Module を使用する利点の 1 つは ​[DataSense](https://docs.mulesoft.com/studio/datasense-concept)​ サポートです。これにより、​`new`​ 操作の入力として機能する ​`args`​ マップをビルドできます。 `new`​ 操作で ​`com.me.Person`​ クラスの ​`Person(String, Integer)`​ コンストラクターをコールする前記の例を続行し、グラフィカルビューの表示アイコン ​![5%](/mulesoft/current/ja-jp/java-module/1.2/_images/graphical-view.png)​ をクリックして、項目を照合するビューを表示します。フローの前のコンポーネントが (​[Set Payload](https://docs.mulesoft.com/mule-runtime/latest/set-payload-transformer-reference)​ コンポーネントでできることと同様に) ​`name`​ および ​`age`​ キーを含むマップを出力するとします。このビューは次のようになります。 ![matching input](/mulesoft/current/ja-jp/java-module/1.2/_images/matching-input.png) 項目を左から右にドラッグアンドドロップすることで一致させることができます。これにより、次のようになります。 ![matched input](/mulesoft/current/ja-jp/java-module/1.2/_images/matched-input.png) `new`​ 操作が設定されて準備が整いました。 DataSense は、操作の出力のメタデータも提供します。​`new`​ 操作により、次に示すように ​`Person`​ オブジェクトが出力メッセージのペイロード内に配置されます。 ![output metadata](/mulesoft/current/ja-jp/java-module/1.2/_images/output-metadata.png) ## [](#対象パラメーター)対象パラメーター 出力オブジェクトをペイロード内に配置する代わりに、​[対象パラメーター](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​をサポートする ​`new`​ 操作で出力オブジェクトを変数に保存できます。 例: ```xml #[{ name: 'John Doe', age: 30 }] ``` 出力オブジェクトは変数に保存され、​`"#[vars.john]"`​ として後からアクセスできるようになります。 ## [](#関連情報)関連情報 - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/1.2/java-invoke-method) - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/1.2/java-instanceof) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/1.2/java-throwable) # クラスのインスタンスの作成 ## [](#java-コンストラクターのコール)Java コンストラクターのコール このページの例は、​`com.me`​ パッケージに属する ​`Person`​ Java クラスに基づいています。 ```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`​ のインスタンスを作成する方法を示しています。 ```xml ``` パラメーターが必要なコンストラクターを使用して ​`Person`​ オブジェクトを作成する方法を次に示します。 ```xml #[{ name: 'John Doe', age: 30 }] ``` コンストラクターのパラメーターでは、​`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-サポート)Studio での DataSense サポート Java Module を使用する利点の 1 つは ​[DataSense](https://docs.mulesoft.com/studio/datasense-concept)​ サポートです。これにより、​`new`​ 操作の入力として機能する ​`args`​ マップをビルドできます。 `new`​ 操作で ​`com.me.Person`​ クラスの ​`Person(String, Integer)`​ コンストラクターをコールする前記の例を続行し、グラフィカルビューの表示アイコン ​![5%](/mulesoft/current/ja-jp/java-module/latest/_images/graphical-view.png)​ をクリックして、項目を照合するビューを表示します。フローの前のコンポーネントが (​[Set Payload](https://docs.mulesoft.com/mule-runtime/latest/set-payload-transformer-reference)​ コンポーネントでできることと同様に) ​`name`​ および ​`age`​ キーを含むマップを出力するとします。このビューは次のようになります。 ![matching input](/mulesoft/current/ja-jp/java-module/latest/_images/matching-input.png) 項目を左から右にドラッグアンドドロップすることで一致させることができます。これにより、次のようになります。 ![matched input](/mulesoft/current/ja-jp/java-module/latest/_images/matched-input.png) `new`​ 操作が設定されて準備が整いました。 DataSense は、操作の出力のメタデータも提供します。​`new`​ 操作により、次に示すように ​`Person`​ オブジェクトが出力メッセージのペイロード内に配置されます。 ![output metadata](/mulesoft/current/ja-jp/java-module/latest/_images/output-metadata.png) ## [](#対象パラメーター)対象パラメーター 出力オブジェクトをペイロード内に配置する代わりに、​[対象パラメーター](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​をサポートする ​`new`​ 操作で出力オブジェクトを変数に保存できます。 例: ```xml #[{ name: 'John Doe', age: 30 }] ``` 出力オブジェクトは変数に保存され、​`"#[vars.john]"`​ として後からアクセスできるようになります。 ## [](#関連情報)関連情報 - [メソッドの呼び出し](https://docs.mulesoft.com/jp/java-module/latest/java-invoke-method) - [クラスのインスタンスのテスト](https://docs.mulesoft.com/jp/java-module/latest/java-instanceof) - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/latest/java-throwable) # メソッドの呼び出し Java メソッド (インスタンスまたは静的) は、Java Module の ​`invoke`​ および ​`invoke static`​ 操作を使用してコールできます。それらの戻り値は、出力メッセージのペイロードに内に置かれるか、​[対象変数](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​に保存できます。 Java Invoke 操作の設定可能なパラメーターの詳細な説明は、​[「Java Module リファレンス」の「操作」セクション](https://docs.mulesoft.com/jp/java-module/1.2/java-reference#operations)​を参照してください。 ## [](#インスタンスメソッドの呼び出し)インスタンスメソッドの呼び出し 次の Java クラス ​`TaxCalculator`​ は ​`com.me`​ パッケージに属しています。 ```java package com.me; public class TaxCalculator { private Double percentBaseTax = 7.0; public Double calculateTax(Double price, Integer percentAdditionalTax) { return price * (this.percentBaseTax + percentAdditionalTax) / 100; } public Boolean isTaxFree(Double price) { if (price < 10) { return true; } return false; } } ```

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

インスタンスメソッドを呼び出す手順は、次のとおりです。 1. Java Module の ​[New 操作](https://docs.mulesoft.com/jp/java-module/1.2/java-create-instance)​を使用して、後でメソッドを呼び出すオブジェクトを作成します。これにより、インスタンス化されたオブジェクトが提供され、そのメソッドの 1 つをコールできます。 2. `invoke`​ 操作をオブジェクトのいずれかのメソッドをコールするように設定します。​`new`​ 操作と同様、​`invoke`​ は入力パラメーターのマップを取り (メソッドに存在する場合)、​[対象パラメーター](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​をサポートします。 次の例では、​`TaxCalculator`​ クラスのインスタンスが作成され、​`taxCalculator`​ 対象変数内に置かれます。次に、​`price`​ と ​`percentAdditionalTax`​ を引数として取る ​`calculateTax(Double, Integer)`​ メソッドがコールされ、その戻り値が ​`totalTax`​ 変数内に置かれます。 ```xml #[{ price: 25.5, percentAdditionalTax: 2 }] ``` メソッドのパラメーターでは、​`constructor="Person(java.lang.Double, java.lang.Integer)"`​ などの完全なパッケージ名を指定できます。これは必要ありませんが、コードをより明確にしたり、Java コードに競合するクラス名がある場合に役立ちます。 Anypoint Studio では、Java Module は ​`invoke`​ 操作で DataSense をサポートしています。DataSense は入力引数と出力値の両方のメタデータを提供します。 この例では、DataSense は ​`calculateTax`​ が ​`Number`​ を返すことを検出するため、​`invoke`​ 操作の出力メタデータは次のようになります。 ![invoke output metadata](/mulesoft/current/ja-jp/java-module/1.2/_images/invoke-output-metadata.png) Studio で ​`invoke`​ を使用する完全な例については、「​[Studio での New 操作および Invoke 操作](#studio_example)​」を参照してください。 `args`​ パラメーターにコンストラクターの引数を設定する場合は、マップのキーでパラメーターがコンストラクターに渡される方法を判断します。 パラメーターを名前 (​`price`​、​`percentAdditionalTax`​ など) で参照するには、 [`-parameters`](https://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html)​ コンパイラーフラグを使用して、メソッドまたはコンストラクターを含む Java クラスをコンパイルする必要があります。 クラスがこのフラグを使用してコンパイルされていない場合は、同じパラメーターが宣言された順序と ​`arg0`​、​`arg1`​ のような正規名で参照されます。 この場合は次のようになります。 ```xml #[{ arg0: 25.5, arg1: 2 }] ``` Java クラスが Studio プロジェクトで定義されている場合、​`-parameters`​ フラグを使用して Java クラスをコンパイルするように Maven コンパイラープラグインを ​`pom.xml`​ で設定する必要があります。 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 -parameters ``` ## [](#dataweave-を使用したメソッドの呼び出し)DataWeave を使用したメソッドの呼び出し Java Module には、​`invoke`​ 操作と同じ機能を DataWeave 式内で提供する DataWeave 関数 (​`Java::invoke`​) もあります。この手法は、​`boolean`​ 値を返すメソッドで特に役立ちます。この関数は、オブジェクトの完全なクラス名、実行するインスタンスメソッド、インスタンス化されたオブジェクトを引数として取り、メソッドの引数をマップとして取ります。 [\[Invoke Instance Methods\]](<#Invoke Instance Methods>)​ の Java クラスでは、この例は ​`TaxCalculator`​ の新しいインスタンスを作成し、Java Module の ​`invoke`​ 操作を使用して ​`isTaxFree(Double)`​ メソッドをコールする代わりに、​[Choice](https://docs.mulesoft.com/mule-runtime/latest/choice-router-concept)​ コンポーネントに DataWeave 関数を埋め込みます。 ```xml ``` ## [](#静的メソッドの呼び出し)静的メソッドの呼び出し 静的 Java メソッドを呼び出す方法の例を次に示します。 ```xml #[{ arg0: 180 }] ``` ## [](#studio_example)Studio での New 操作および Invoke 操作 Anypoint Studio では、Java パッケージをプロジェクトに書き込みまたは読み込み、1 つ以上のフロー内で Java 操作を設定してから、その操作が存在する Mule アプリケーションを実行できます。 ![Java Module の例](/mulesoft/current/ja-jp/java-module/1.2/_images/java-module-ex.png) この例では、Mule アプリケーションに 2 つのフローをセットアップします。 1. 小さな Java パッケージ (​`com.examples`​) を記述します。 2. インスタンスメソッド (​`Hello.java`​ と ​`Add.java`​) を含む 2 つのシンプルな Java クラスを記述します。 3. Apache Maven コンパイラープラグインを使用して、​`arg0`​、​`arg1`​ などではなく、設定で名前付きパラメーターを使用できる方法でクラスをコンパイルします。 4. Java Module の ​**New**​ 操作を使用して、​`Hello`​ と ​`Add`​ オブジェクトをインスタンス化し、インスタンスメソッド内の名前付きパラメーターにアクセスします。 5. Java Module の ​**Invoke**​ 操作を使用して、​`hello()`​ と ​`add(3,4)`​ インスタンスメソッドを呼び出します。 6. Mule アプリケーションを実行して、Studio で ​**New**​ 操作と ​**Invoke**​ 操作を実行します。 次のような 2 つのシンプルな Java クラスでメソッドを呼び出すとします。 インスタンスメソッドのある Hello クラス ```java package com.examples; public class Hello { //Constructor public Hello() { } //Instance method: hello() //Returns the string "helloWorld". public String hello() { return "helloWorld"; } } ``` パラメーター化されたインスタンスメソッドのあるクラスの追加 ```java public class Add { public int x = 0; public int y = 0; //Constructor public Add(int numA, int numB) { x = numA; y = numB; } //Instance method with parameters: add(int x, int y). //Returns the sum of inputs x and y. public int add(int x, int y) { return x + y; } } ``` `hello()`​ と ​`add()`​ を呼び出す Mule アプリケーションを作成する方法 1. Studio で、​**\[File (ファイル)\]**​ > ​**\[New (新規)\]**​ > ​**\[Project (プロジェクト)\]**​ を選択し、プロジェクト名 (​`javaexamples`​) を指定して、​**\[Finish (完了)\]**​ をクリックします。 2. **Package Explorer**​ で Mule プロジェクトの ​`src/main/java`​ ディレクトリを右クリックして、クラスの Java パッケージを作成します。 3. **\[New (新規)\]**​ > ​**\[Package (パッケージ)\]**​ を選択します。 4. **\[Name (名前)\]**​ 項目に「​`com.examples`​」というパッケージ名を指定します。 5. **\[Finish (完了)\]**​ をクリックします。 `src/main/java`​ ディレクトリに ​`com.examples`​ パッケージが表示されていることを確認します。 6. Studio で新しい ​`com.examples`​ パッケージを右クリックして ​**\[New (新規)\]**​ > ​**\[Class (クラス)\]**​ を選択し、​`Hello`​ クラスと ​`Add`​ クラスの Java コードを新しい ​`com.examples`​ パッケージに追加します。 7. **\[Name (名前)\]**​ 項目で、​`Hello`​ クラスの「​`Hello.java`​」という名前を入力し、​**\[Finish (完了)\]**​ をクリックします。 8. その後のリストから、​`Hello`​ クラスコンテンツをコピーして ​`Hello.java`​ ファイルに貼り付けます。 ファイル全体が次のようになり、先頭に ​`package com.examples`​ と表示されます。 ```java package com.examples; public class Hello { //Constructor public Hello() { } //Instance method: hello() //Returns the string "helloWorld". public String hello() { return "helloWorld"; } } ``` 9. Studio で新しい ​`com.examples`​ パッケージを右クリックして、​**\[New (新規)\]**​ > ​**\[Class (クラス)\]**​ を選択します。 10. **\[Name (名前)\]**​ 項目に「​`Add.java`​」値を入力します。 11. **\[Finish (完了)\]**​ をクリックします。 12. クラスコンテンツをコピーして ​`Add.java`​ ファイルに貼り付けます。 ファイル全体が次のようになり、先頭に ​`package com.examples`​ と表示されます。 ```java package com.examples; public class Add { public int x = 0; public int y = 0; //Constructor public Add(int numA, int numB) { x = numA; y = numB; } //Instance method with parameters: add(int x, int y). //Returns the sum of inputs x and y. public int add(int x, int y) { return x + y; } } ``` 13. Studio の ​**\[javaexamples\]**​ タブをクリックして、Mule アプリケーションに戻り、​`Hello`​ クラスのフローと ​`hello()`​ メソッドをセットアップします。 1. **\[javaexamples\]**​ で、​**Scheduler**​ コンポーネントを Studio キャンバスにドラッグして、フローのトリガーを指定します。 省略可能: **Scheduler**​ コンポーネントの頻度をデフォルト以外の値に設定することもできます。たとえば、​**\[Frequency (頻度)\]**​ を \[​`10`​\]、​**\[Time unit (時間単位)\]**​ を \[​`SECONDS`​\] に設定します。 2. Mule パレットで Java Module が選択可能になっていない場合は、​**\[Add Module (モジュールの追加)\]**​ をクリックして、Java Module をパレットの左列にドラッグします。 3. Java Module をクリックし、その ​**New**​ 操作をフローの Scheduler の右側に配置してから、操作をダブルクリックして設定します。 - **Class (クラス)**​: `com.examples.Hello` - **Constructor (コンストラクター)**​: `Hello()` **\[Constructor (コンストラクター)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 4. **Invoke**​ 操作をフローの ​**New**​ 操作の右側に配置してから、操作をダブルクリックして設定します。 - **\[Instance (インスタンス)\]**​ 項目で、​**\[fx\]**​ をクリックし、値を \[​`payload`​\] に設定します。 - **\[Class (クラス)\]**​ 項目: `com.examples.Hello` - **\[Method (メソッド)\]**​ 項目: `hello()` **\[Method (メソッド)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 5. **Logger**​ コンポーネントを見つけて、フローの ​**Invoke**​ 操作の右側にドラッグし、その ​**\[Message (メッセージ)\]**​ 項目で ​**\[fx\]**​ をクリックして「​`payload`​」と入力します。 6. **Flow Reference**​ コンポーネントを見つけて、​**Logger**​ コンポーネントの右側にドラッグし、このコンポーネントをダブルクリックして、​**\[Flow Name (フロー名)\]**​ 項目を \[​`javaexamplesFlow1`​\] に設定します。これは、次のステップで作成する新しいフローの名前です。 14. 新しい ​**Flow**​ コンポーネントを既存のフローの下にドラッグして、新しいフローをセットアップします。この際、その名前が ​`javaexamplesFlow1`​ であることを確認します (つまり、他のフローの ​**\[Flow Reference (フロー参照)\]**​ 設定がこの新しいフローの名前と一致します)。 1. Java Module をクリックして、​**New**​ 操作を新しい ​`javaexamplesFlow1`​ フローの ​**\[Process (プロセス)\]**​ セクションにドラッグしてから、この操作に次の設定を指定します。 - **Args (引数)**​: 引数の ​`{ "numA" : 5, "numB" : 6}`​。 - **Class (クラス)**​: `com.examples.Add` - **Constructor (コンストラクター)**​: `Add(int,int)` **\[Constructor (コンストラクター)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 2. **Invoke**​ 操作を新しいフローの ​**New**​ 操作の右側に配置してから、次の設定を指定します。 - **\[fx\]**​ をクリックし、​**\[Instance (インスタンス)\]**​ 項目を \[​`payload`​\] に設定します。 - **Args (引数)**​: 呼び出し時に処理する引数の ​`{ "x" : 3, "y" : 4}` - **Class (クラス)**​: `com.examples.Add` - **Method (メソッド)**​: `add(int,int)` **\[Method (メソッド)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 3. **New**​ 操作の処理を続行し、​**\[Advanced (詳細)\]**​ 設定リンクをクリックして、​**\[Output (出力)\]**​ 値を Invoke 操作のペイロードを保存する対象変数に設定します。 - **Target Variable (対象変数)**​: `mySum` - **Target Value (対象値)**​: `payload` このステップでは、ペイロードを対象変数に渡す必要が生じた場合の方法を示しています。 4. **Logger**​ コンポーネントを新しいフローの ​**Invoke**​ 操作の右側に配置し、​**\[fx\]**​ をクリックして、​**\[Message (メッセージ)\]**​ 項目を \[​`vars.mySum`​\] に設定します。 この ​**\[Logger (ロガー)\]**​ 設定は、Studio コンソールの対象変数に保存されるペイロードの表示用です。 15. 名前付きパラメーターを見やすくするために、Mule コンパイラープラグインの XML を Mule プロジェクトの ​`pom.xml`​ ファイルに追加します。 1. **Package Explorer**​ で、​**javaexamples**​ プロジェクトの下部にある ​`pom.xml`​ をダブルクリックします。 2. Mule コンパイラープラグインの XML を ​`pom.xml`​ ファイルの ​``​ 要素の間に追加し、ここに定義済みのプラグインがあれば保持します。 ```xml ``` この XML を POM ファイルに貼り付けます。 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 true 1.8 1.8 ``` ```xml ``` Maven コンパイラープラグインの XML を追加せずに、​**New**​ 操作で指定したパラメーターを使用しようとすると、​**New**​ 操作が失敗し、次のようなメッセージが表示されます。 `Failed to instantiate Class [com.examples.Add] with arguments [Integer numA, Integer numB]. (引数 [Integer numA, Integer numB] でのクラス [com.examples.Add] のインスタンス化に失敗しました。) Expected arguments are [int arg0, int arg1] (期待される引数は [int arg0, int arg1] です)` 16. Studio で ​**\[javaexamples\]**​ タブをクリックして、Mule アプリケーションに戻ります。 17. 上部の一連のメニューから ​**\[Run (実行)\]**​ > ​**\[Run (実行)\]**​ を選択して、Mule アプリケーションを実行します。 18. プロジェクトが正常にデプロイされたら、​**\[Console (コンソール)\]**​ で出力が予想どおりであることを確認します。 コンソールには次のような出力が表示されます (読みやすいように短縮してあります)。 ```txt INFO 2019-09-22 09:21:32 ... [event: 4c31f...] ... LoggerMessageProcessor: helloWorld INFO 2019-09-22 09:21:32 ... [event: 4c31f...] ... LoggerMessageProcessor: 7 ``` - `helloWorld`​ は ​**javaexamplesFlow**​ の出力値です。 - `7`​ は ​**javaexamplesFlow1**​ の出力値です。 ## [](#関連情報)関連情報 - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/1.2/java-throwable) - [Java Module の引数変換](https://docs.mulesoft.com/jp/java-module/1.2/java-argument-transformation) - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/1.2/java-reference) # メソッドの呼び出し Java メソッド (インスタンスまたは静的) は、Java Module の ​`invoke`​ および ​`invoke static`​ 操作を使用してコールできます。それらの戻り値は、出力メッセージのペイロードに内に置かれるか、​[対象変数](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​に保存できます。 Java Invoke 操作の設定可能なパラメーターの詳細な説明は、​[「Java Module リファレンス」の「操作」セクション](https://docs.mulesoft.com/jp/java-module/latest/java-reference#operations)​を参照してください。 ## [](#インスタンスメソッドの呼び出し)インスタンスメソッドの呼び出し 次の Java クラス ​`TaxCalculator`​ は ​`com.me`​ パッケージに属しています。 ```java package com.me; public class TaxCalculator { private Double percentBaseTax = 7.0; public Double calculateTax(Double price, Integer percentAdditionalTax) { return price * (this.percentBaseTax + percentAdditionalTax) / 100; } public Boolean isTaxFree(Double price) { if (price < 10) { return true; } return false; } } ```

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

インスタンスメソッドを呼び出す手順は、次のとおりです。 1. Java Module の ​[New 操作](https://docs.mulesoft.com/jp/java-module/latest/java-create-instance)​を使用して、後でメソッドを呼び出すオブジェクトを作成します。これにより、インスタンス化されたオブジェクトが提供され、そのメソッドの 1 つをコールできます。 2. `invoke`​ 操作をオブジェクトのいずれかのメソッドをコールするように設定します。​`new`​ 操作と同様、​`invoke`​ は入力パラメーターのマップを取り (メソッドに存在する場合)、​[対象パラメーター](https://docs.mulesoft.com/mule-runtime/latest/target-variables)​をサポートします。 次の例では、​`TaxCalculator`​ クラスのインスタンスが作成され、​`taxCalculator`​ 対象変数内に置かれます。次に、​`price`​ と ​`percentAdditionalTax`​ を引数として取る ​`calculateTax(Double, Integer)`​ メソッドがコールされ、その戻り値が ​`totalTax`​ 変数内に置かれます。 ```xml #[{ price: 25.5, percentAdditionalTax: 2 }] ``` メソッドのパラメーターでは、​`constructor="Person(java.lang.Double, java.lang.Integer)"`​ などの完全なパッケージ名を指定できます。これは必要ありませんが、コードをより明確にしたり、Java コードに競合するクラス名がある場合に役立ちます。 Anypoint Studio では、Java Module は ​`invoke`​ 操作で DataSense をサポートしています。DataSense は入力引数と出力値の両方のメタデータを提供します。 この例では、DataSense は ​`calculateTax`​ が ​`Number`​ を返すことを検出するため、​`invoke`​ 操作の出力メタデータは次のようになります。 ![invoke output metadata](/mulesoft/current/ja-jp/java-module/latest/_images/invoke-output-metadata.png) Studio で ​`invoke`​ を使用する完全な例については、「​[Studio での New 操作および Invoke 操作](#studio_example)​」を参照してください。 `args`​ パラメーターにコンストラクターの引数を設定する場合は、マップのキーでパラメーターがコンストラクターに渡される方法を判断します。 パラメーターを名前 (​`price`​、​`percentAdditionalTax`​ など) で参照するには、 [`-parameters`](https://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html)​ コンパイラーフラグを使用して、メソッドまたはコンストラクターを含む Java クラスをコンパイルする必要があります。 クラスがこのフラグを使用してコンパイルされていない場合は、同じパラメーターが宣言された順序と ​`arg0`​、​`arg1`​ のような正規名で参照されます。 この場合は次のようになります。 ```xml #[{ arg0: 25.5, arg1: 2 }] ``` Java クラスが Studio プロジェクトで定義されている場合、​`-parameters`​ フラグを使用して Java クラスをコンパイルするように Maven コンパイラープラグインを ​`pom.xml`​ で設定する必要があります。 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 -parameters ``` ## [](#dataweave-を使用したメソッドの呼び出し)DataWeave を使用したメソッドの呼び出し Java Module には、​`invoke`​ 操作と同じ機能を DataWeave 式内で提供する DataWeave 関数 (​`Java::invoke`​) もあります。この手法は、​`boolean`​ 値を返すメソッドで特に役立ちます。この関数は、オブジェクトの完全なクラス名、実行するインスタンスメソッド、インスタンス化されたオブジェクトを引数として取り、メソッドの引数をマップとして取ります。 [\[Invoke Instance Methods\]](<#Invoke Instance Methods>)​ の Java クラスでは、この例は ​`TaxCalculator`​ の新しいインスタンスを作成し、Java Module の ​`invoke`​ 操作を使用して ​`isTaxFree(Double)`​ メソッドをコールする代わりに、​[Choice](https://docs.mulesoft.com/mule-runtime/latest/choice-router-concept)​ コンポーネントに DataWeave 関数を埋め込みます。 ```xml ``` ## [](#静的メソッドの呼び出し)静的メソッドの呼び出し 静的 Java メソッドを呼び出す方法の例を次に示します。 ```xml #[{ arg0: 180 }] ``` ## [](#studio_example)Studio での New 操作および Invoke 操作 Anypoint Studio では、Java パッケージをプロジェクトに書き込みまたは読み込み、1 つ以上のフロー内で Java 操作を設定してから、その操作が存在する Mule アプリケーションを実行できます。 ![Java Module の例](/mulesoft/current/ja-jp/java-module/latest/_images/java-module-ex.png) この例では、Mule アプリケーションに 2 つのフローをセットアップします。 1. 小さな Java パッケージ (​`com.examples`​) を記述します。 2. インスタンスメソッド (​`Hello.java`​ と ​`Add.java`​) を含む 2 つのシンプルな Java クラスを記述します。 3. Apache Maven コンパイラープラグインを使用して、​`arg0`​、​`arg1`​ などではなく、設定で名前付きパラメーターを使用できる方法でクラスをコンパイルします。 4. Java Module の ​**New**​ 操作を使用して、​`Hello`​ と ​`Add`​ オブジェクトをインスタンス化し、インスタンスメソッド内の名前付きパラメーターにアクセスします。 5. Java Module の ​**Invoke**​ 操作を使用して、​`hello()`​ と ​`add(3,4)`​ インスタンスメソッドを呼び出します。 6. Mule アプリケーションを実行して、Studio で ​**New**​ 操作と ​**Invoke**​ 操作を実行します。 次のような 2 つのシンプルな Java クラスでメソッドを呼び出すとします。 インスタンスメソッドのある Hello クラス ```java package com.examples; public class Hello { //Constructor public Hello() { } //Instance method: hello() //Returns the string "helloWorld". public String hello() { return "helloWorld"; } } ``` パラメーター化されたインスタンスメソッドのあるクラスの追加 ```java public class Add { public int x = 0; public int y = 0; //Constructor public Add(int numA, int numB) { x = numA; y = numB; } //Instance method with parameters: add(int x, int y). //Returns the sum of inputs x and y. public int add(int x, int y) { return x + y; } } ``` `hello()`​ と ​`add()`​ を呼び出す Mule アプリケーションを作成する方法 1. Studio で、​**\[File (ファイル)\]**​ > ​**\[New (新規)\]**​ > ​**\[Project (プロジェクト)\]**​ を選択し、プロジェクト名 (​`javaexamples`​) を指定して、​**\[Finish (完了)\]**​ をクリックします。 2. **Package Explorer**​ で Mule プロジェクトの ​`src/main/java`​ ディレクトリを右クリックして、クラスの Java パッケージを作成します。 3. **\[New (新規)\]**​ > ​**\[Package (パッケージ)\]**​ を選択します。 4. **\[Name (名前)\]**​ 項目に「​`com.examples`​」というパッケージ名を指定します。 5. **\[Finish (完了)\]**​ をクリックします。 `src/main/java`​ ディレクトリに ​`com.examples`​ パッケージが表示されていることを確認します。 6. Studio で新しい ​`com.examples`​ パッケージを右クリックして ​**\[New (新規)\]**​ > ​**\[Class (クラス)\]**​ を選択し、​`Hello`​ クラスと ​`Add`​ クラスの Java コードを新しい ​`com.examples`​ パッケージに追加します。 7. **\[Name (名前)\]**​ 項目で、​`Hello`​ クラスの「​`Hello.java`​」という名前を入力し、​**\[Finish (完了)\]**​ をクリックします。 8. その後のリストから、​`Hello`​ クラスコンテンツをコピーして ​`Hello.java`​ ファイルに貼り付けます。 ファイル全体が次のようになり、先頭に ​`package com.examples`​ と表示されます。 ```java package com.examples; public class Hello { //Constructor public Hello() { } //Instance method: hello() //Returns the string "helloWorld". public String hello() { return "helloWorld"; } } ``` 9. Studio で新しい ​`com.examples`​ パッケージを右クリックして、​**\[New (新規)\]**​ > ​**\[Class (クラス)\]**​ を選択します。 10. **\[Name (名前)\]**​ 項目に「​`Add.java`​」値を入力します。 11. **\[Finish (完了)\]**​ をクリックします。 12. クラスコンテンツをコピーして ​`Add.java`​ ファイルに貼り付けます。 ファイル全体が次のようになり、先頭に ​`package com.examples`​ と表示されます。 ```java package com.examples; public class Add { public int x = 0; public int y = 0; //Constructor public Add(int numA, int numB) { x = numA; y = numB; } //Instance method with parameters: add(int x, int y). //Returns the sum of inputs x and y. public int add(int x, int y) { return x + y; } } ``` 13. Studio の ​**\[javaexamples\]**​ タブをクリックして、Mule アプリケーションに戻り、​`Hello`​ クラスのフローと ​`hello()`​ メソッドをセットアップします。 1. **\[javaexamples\]**​ で、​**Scheduler**​ コンポーネントを Studio キャンバスにドラッグして、フローのトリガーを指定します。 省略可能: **Scheduler**​ コンポーネントの頻度をデフォルト以外の値に設定することもできます。たとえば、​**\[Frequency (頻度)\]**​ を \[​`10`​\]、​**\[Time unit (時間単位)\]**​ を \[​`SECONDS`​\] に設定します。 2. Mule パレットで Java Module が選択可能になっていない場合は、​**\[Add Module (モジュールの追加)\]**​ をクリックして、Java Module をパレットの左列にドラッグします。 3. Java Module をクリックし、その ​**New**​ 操作をフローの Scheduler の右側に配置してから、操作をダブルクリックして設定します。 - **Class (クラス)**​: `com.examples.Hello` - **Constructor (コンストラクター)**​: `Hello()` **\[Constructor (コンストラクター)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 4. **Invoke**​ 操作をフローの ​**New**​ 操作の右側に配置してから、操作をダブルクリックして設定します。 - **\[Instance (インスタンス)\]**​ 項目で、​**\[fx\]**​ をクリックし、値を \[​`payload`​\] に設定します。 - **\[Class (クラス)\]**​ 項目: `com.examples.Hello` - **\[Method (メソッド)\]**​ 項目: `hello()` **\[Method (メソッド)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 5. **Logger**​ コンポーネントを見つけて、フローの ​**Invoke**​ 操作の右側にドラッグし、その ​**\[Message (メッセージ)\]**​ 項目で ​**\[fx\]**​ をクリックして「​`payload`​」と入力します。 6. **Flow Reference**​ コンポーネントを見つけて、​**Logger**​ コンポーネントの右側にドラッグし、このコンポーネントをダブルクリックして、​**\[Flow Name (フロー名)\]**​ 項目を \[​`javaexamplesFlow1`​\] に設定します。これは、次のステップで作成する新しいフローの名前です。 14. 新しい ​**Flow**​ コンポーネントを既存のフローの下にドラッグして、新しいフローをセットアップします。この際、その名前が ​`javaexamplesFlow1`​ であることを確認します (つまり、他のフローの ​**\[Flow Reference (フロー参照)\]**​ 設定がこの新しいフローの名前と一致します)。 1. Java Module をクリックして、​**New**​ 操作を新しい ​`javaexamplesFlow1`​ フローの ​**\[Process (プロセス)\]**​ セクションにドラッグしてから、この操作に次の設定を指定します。 - **Args (引数)**​: 引数の ​`{ "numA" : 5, "numB" : 6}`​。 - **Class (クラス)**​: `com.examples.Add` - **Constructor (コンストラクター)**​: `Add(int,int)` **\[Constructor (コンストラクター)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 2. **Invoke**​ 操作を新しいフローの ​**New**​ 操作の右側に配置してから、次の設定を指定します。 - **\[fx\]**​ をクリックし、​**\[Instance (インスタンス)\]**​ 項目を \[​`payload`​\] に設定します。 - **Args (引数)**​: 呼び出し時に処理する引数の ​`{ "x" : 3, "y" : 4}` - **Class (クラス)**​: `com.examples.Add` - **Method (メソッド)**​: `add(int,int)` **\[Method (メソッド)\]**​ 設定の ​**\[fx\]**​ はクリックしないでください。 3. **New**​ 操作の処理を続行し、​**\[Advanced (詳細)\]**​ 設定リンクをクリックして、​**\[Output (出力)\]**​ 値を Invoke 操作のペイロードを保存する対象変数に設定します。 - **Target Variable (対象変数)**​: `mySum` - **Target Value (対象値)**​: `payload` このステップでは、ペイロードを対象変数に渡す必要が生じた場合の方法を示しています。 4. **Logger**​ コンポーネントを新しいフローの ​**Invoke**​ 操作の右側に配置し、​**\[fx\]**​ をクリックして、​**\[Message (メッセージ)\]**​ 項目を \[​`vars.mySum`​\] に設定します。 この ​**\[Logger (ロガー)\]**​ 設定は、Studio コンソールの対象変数に保存されるペイロードの表示用です。 15. 名前付きパラメーターを見やすくするために、Mule コンパイラープラグインの XML を Mule プロジェクトの ​`pom.xml`​ ファイルに追加します。 1. **Package Explorer**​ で、​**javaexamples**​ プロジェクトの下部にある ​`pom.xml`​ をダブルクリックします。 2. Mule コンパイラープラグインの XML を ​`pom.xml`​ ファイルの ​``​ 要素の間に追加し、ここに定義済みのプラグインがあれば保持します。 ```xml ``` この XML を POM ファイルに貼り付けます。 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 true 1.8 1.8 ``` ```xml ``` Maven コンパイラープラグインの XML を追加せずに、​**New**​ 操作で指定したパラメーターを使用しようとすると、​**New**​ 操作が失敗し、次のようなメッセージが表示されます。 `Failed to instantiate Class [com.examples.Add] with arguments [Integer numA, Integer numB]. (引数 [Integer numA, Integer numB] でのクラス [com.examples.Add] のインスタンス化に失敗しました。) Expected arguments are [int arg0, int arg1] (期待される引数は [int arg0, int arg1] です)` 16. Studio で ​**\[javaexamples\]**​ タブをクリックして、Mule アプリケーションに戻ります。 17. 上部の一連のメニューから ​**\[Run (実行)\]**​ > ​**\[Run (実行)\]**​ を選択して、Mule アプリケーションを実行します。 18. プロジェクトが正常にデプロイされたら、​**\[Console (コンソール)\]**​ で出力が予想どおりであることを確認します。 コンソールには次のような出力が表示されます (読みやすいように短縮してあります)。 ```txt INFO 2019-09-22 09:21:32 ... [event: 4c31f...] ... LoggerMessageProcessor: helloWorld INFO 2019-09-22 09:21:32 ... [event: 4c31f...] ... LoggerMessageProcessor: 7 ``` - `helloWorld`​ は ​**javaexamplesFlow**​ の出力値です。 - `7`​ は ​**javaexamplesFlow1**​ の出力値です。 ## [](#関連情報)関連情報 - [Throwable の処理](https://docs.mulesoft.com/jp/java-module/latest/java-throwable) - [Java Module の引数変換](https://docs.mulesoft.com/jp/java-module/latest/java-argument-transformation) - [Java Module リファレンス](https://docs.mulesoft.com/jp/java-module/latest/java-reference) # 引数変換 Java Module バージョン 1.1 以降、Java 呼び出しに指定された引数が Java メソッドが想定する型と完全に一致しない場合でも、このモジュールはその引数を変換します。Java Module は、パラメーターをメソッドが想定するものに変換する方法を推定します。 ## [](#引数が変換されるタイミング)引数が変換されるタイミング Java Module は、指定されたパラメーターごとに、その型がそのパラメーターのメソッドが想定する型と一致するかどうかをチェックします。メソッドが想定する型でない場合は、Java Module が想定される型に変換します。 ## [](#シンプルな引数変換の例)シンプルな引数変換の例 以下に、引数の 1 つが変換されるシンプルな例を示します。 `Math`​ クラスから ​`min`​ 静的メソッドがコールされますが、クラスは 2 つの ​`int`​ パラメーターを受け取ることを想定します。このコールの実行時には Number と String が使用されます。 ```xml #[{ 'arg0': 5, 'arg1' : "3" }] ``` この場合、​`arg1`​ は String として渡されるところですが、Java メソッドをコールする前に Integer に変換されます。 ## [](#カスタム-pojo-を-map-としてモジュールに渡す)カスタム POJO を Map としてモジュールに渡す Mule 3 では、カスタム POJO を処理する場合に、ユーザーがデータをどの型に変換するかを DataWeave 式で明示的に宣言していました。Mule 4 では、引数の想定される型を Java Module が自動的に認識し、データを想定される型に変換しようとします。(POJO は Plain Old Java Object の略称です)。 以下の例では、Java Module で Map パラメーターがカスタム POJO に変換されています。 1. POJO の ​`Car`​ クラスを定義します。 ```java public class Car { private String doors; private String wheels; private String engine; public String getDoors() { return doors; } public String getWheels() { return wheels; } public String getEngine() { return engine; } } ``` 2. POJO のインスタンスを受信するクラスの ​`describeCar`​ 静的メソッドを宣言します。 ```java public class CarUtils { public static String describeCar(Car car) { return "This car has: " + car.getEngine() + ", " + car.getWheels() + ", " + car.getDoors(); } } ``` 3. Mule フローで静的メソッドを呼び出します。 ```xml #[{ 'car': { 'doors' : "Four doors", 'engine' : "120 Horsepower engine", 'wheels' : "17 Inch chromed rims" } }] ``` Mule 操作は ​`car`​ Map を受け取り、そのキーと値は ​`Car`​ クラスインスタンスにマップされます。Java メソッドを呼び出す前に、この Map がインスタンスに変換されます。こうした改善がなければ呼び出しに失敗し、Java メソッドに渡された引数がその署名と一致していなかった旨が表示されるでしょう。 ## [](#collection-と-map)Collection と Map Java Module は、Collection の各要素と Map の各エントリが、メソッドの署名で宣言された Java ジェネリクスを使用しているかどうかをチェックします。使用していない要素がある場合、Java Module は Collection または Map 全体を作成して、変換済みの要素を再入力します。

変換が必要な場合は、Collection または Map の別のインスタンスで Java メソッドがコールされます (Mule フローで渡されるものと同じではありません)。この点が特に重要となるのは、コールされたメソッドで Collection または Map の要素を追加または削除し、呼び出しが必要になった後でこの Collection または Map を参照できることが想定される場合です。

## [](#list-の変換例)List の変換例 操作に指定された ​`List`​ が変換され、変換された項目を含む新しい ​`List`​ が Java メソッドに渡されます。 `IntegerUtils`​ Java クラスは、​`sumNumbers`​ 静的メソッドを宣言します。 ```java public class IntegerUtils { public static Integer sumNumbers(List numbers) { return numbers.stream().mapToInt(i -> i.intValue()).sum(); } } ``` この Mule フローは、Java クラスを呼び出します。 ```xml #[{ 'numbers' : [1, "5", 4, "8", 3] }] ``` フローの ​`numbers`​ リストに 2 つの String オブジェクト (​`"5"`​ と ​`"8"`​) があり、モジュールはそれらを Integer に変換します。 ## [](#map-の変換例)Map の変換例 操作の Map が変換され、変換されたキーと値を含む新しい Map が Java メソッドに渡されます。 この Java クラスは、​`sumMapValues`​ 静的メソッドを宣言します。 ```java public class MapUtils { public static Integer sumMapValues(Map map) { return map.keySet().stream().mapToInt(i -> i.intValue()).sum(); } } ``` この Mule フローは、​`MapUtils`​ Java クラスを呼び出します。 ```xml #[{ 'map' :{ 'books': "22", 'pencils': 33, 'pens': 12 } }] ``` この Map には、Java メソッドで強制されるジェネリクスに従っていない値があります。このため、変換されたキーと値を指定した新しいインスタンスを使用してメソッドがコールされます。 ## [](#メソッドへの-java-バイト配列の受け渡しの例)メソッドへの Java バイト配列の受け渡しの例 ユーザーによりアップロードされた画像ファイルを処理する Mule アプリケーションについて考えてみます。このファイルを効率的に処理するために、画像データをバイト配列として Java メソッドに渡してさらに処理します。この例は、Anypoint Studio の Java Module でバイト配列を Java メソッドに渡すように設定し、画像データが正しく効率的に処理されるようにする方法を示しています。 1. Anypoint Studio で新しい Mule プロジェクトを作成し、​**HTTP Listener**​ をフローに追加します。 これは、受信ファイルアップロード要求のエントリポイントになります。 2. **\[Set Payload\]**​ 操作を ​**\[HTTP Listener\]**​ の後にドラッグします。 3. **\[Set Payload\]**​ 操作を選択し、​**\[Value (値)\]**​ で次の DataWeave ペイロードを設定します。 ```Dataweave %dw 2.0 output application/octet-stream --- payload ``` 1. **\[Java Module Invoke\]**​ 操作を ​**\[Set Payload\]**​ の後にドラッグします。 2. **\[Invoke\]**​ 操作を選択し、Java メソッドをコールするように設定します。 メソッドの署名がバイト配列をパラメーターとして受け入れることを確認します。 3. **Invoke**​ 操作の設定で、Method プロパティを、呼び出す Java メソッドの名前 (​`processImage`​ など) に設定します。 4. 受信ファイルデータを Java メソッドのバイト配列パラメーターにマップします。 DataWeave を使用して、ファイルデータをバイト配列に変換することができます。 5. 処理された画像データを処理するためのロジック (データベースへの保存や別のサービスへの送信など) を追加して、引き続き Mule フローを構築します。 **\[Configuration XML (設定 XML)\]**​ ウィンドウでは、設定は次のように記述されます。 ```xml ``` ## [](#関連情報)関連情報 - [Java Module の例](https://docs.mulesoft.com/jp/java-module/1.2/java-module-examples) # 引数変換 Java Module バージョン 1.1 以降、Java 呼び出しに指定された引数が Java メソッドが想定する型と完全に一致しない場合でも、このモジュールはその引数を変換します。Java Module は、パラメーターをメソッドが想定するものに変換する方法を推定します。 ## [](#引数が変換されるタイミング)引数が変換されるタイミング Java Module は、指定されたパラメーターごとに、その型がそのパラメーターのメソッドが想定する型と一致するかどうかをチェックします。メソッドが想定する型でない場合は、Java Module が想定される型に変換します。 ## [](#シンプルな引数変換の例)シンプルな引数変換の例 以下に、引数の 1 つが変換されるシンプルな例を示します。 `Math`​ クラスから ​`min`​ 静的メソッドがコールされますが、クラスは 2 つの ​`int`​ パラメーターを受け取ることを想定します。このコールの実行時には Number と String が使用されます。 ```xml #[{ 'arg0': 5, 'arg1' : "3" }] ``` この場合、​`arg1`​ は String として渡されるところですが、Java メソッドをコールする前に Integer に変換されます。 ## [](#カスタム-pojo-を-map-としてモジュールに渡す)カスタム POJO を Map としてモジュールに渡す Mule 3 では、カスタム POJO を処理する場合に、ユーザーがデータをどの型に変換するかを DataWeave 式で明示的に宣言していました。Mule 4 では、引数の想定される型を Java Module が自動的に認識し、データを想定される型に変換しようとします。(POJO は Plain Old Java Object の略称です)。 以下の例では、Java Module で Map パラメーターがカスタム POJO に変換されています。 1. POJO の ​`Car`​ クラスを定義します。 ```java public class Car { private String doors; private String wheels; private String engine; public String getDoors() { return doors; } public String getWheels() { return wheels; } public String getEngine() { return engine; } } ``` 2. POJO のインスタンスを受信するクラスの ​`describeCar`​ 静的メソッドを宣言します。 ```java public class CarUtils { public static String describeCar(Car car) { return "This car has: " + car.getEngine() + ", " + car.getWheels() + ", " + car.getDoors(); } } ``` 3. Mule フローで静的メソッドを呼び出します。 ```xml #[{ 'car': { 'doors' : "Four doors", 'engine' : "120 Horsepower engine", 'wheels' : "17 Inch chromed rims" } }] ``` Mule 操作は ​`car`​ Map を受け取り、そのキーと値は ​`Car`​ クラスインスタンスにマップされます。Java メソッドを呼び出す前に、この Map がインスタンスに変換されます。こうした改善がなければ呼び出しに失敗し、Java メソッドに渡された引数がその署名と一致していなかった旨が表示されるでしょう。 ## [](#collection-と-map)Collection と Map Java Module は、Collection の各要素と Map の各エントリが、メソッドの署名で宣言された Java ジェネリクスを使用しているかどうかをチェックします。使用していない要素がある場合、Java Module は Collection または Map 全体を作成して、変換済みの要素を再入力します。

変換が必要な場合は、Collection または Map の別のインスタンスで Java メソッドがコールされます (Mule フローで渡されるものと同じではありません)。この点が特に重要となるのは、コールされたメソッドで Collection または Map の要素を追加または削除し、呼び出しが必要になった後でこの Collection または Map を参照できることが想定される場合です。

## [](#list-の変換例)List の変換例 操作に指定された ​`List`​ が変換され、変換された項目を含む新しい ​`List`​ が Java メソッドに渡されます。 `IntegerUtils`​ Java クラスは、​`sumNumbers`​ 静的メソッドを宣言します。 ```java public class IntegerUtils { public static Integer sumNumbers(List numbers) { return numbers.stream().mapToInt(i -> i.intValue()).sum(); } } ``` この Mule フローは、Java クラスを呼び出します。 ```xml #[{ 'numbers' : [1, "5", 4, "8", 3] }] ``` フローの ​`numbers`​ リストに 2 つの String オブジェクト (​`"5"`​ と ​`"8"`​) があり、モジュールはそれらを Integer に変換します。 ## [](#map-の変換例)Map の変換例 操作の Map が変換され、変換されたキーと値を含む新しい Map が Java メソッドに渡されます。 この Java クラスは、​`sumMapValues`​ 静的メソッドを宣言します。 ```java public class MapUtils { public static Integer sumMapValues(Map map) { return map.keySet().stream().mapToInt(i -> i.intValue()).sum(); } } ``` この Mule フローは、​`MapUtils`​ Java クラスを呼び出します。 ```xml #[{ 'map' :{ 'books': "22", 'pencils': 33, 'pens': 12 } }] ``` この Map には、Java メソッドで強制されるジェネリクスに従っていない値があります。このため、変換されたキーと値を指定した新しいインスタンスを使用してメソッドがコールされます。 ## [](#メソッドへの-java-バイト配列の受け渡しの例)メソッドへの Java バイト配列の受け渡しの例 ユーザーによりアップロードされた画像ファイルを処理する Mule アプリケーションについて考えてみます。このファイルを効率的に処理するために、画像データをバイト配列として Java メソッドに渡してさらに処理します。この例は、Anypoint Studio の Java Module でバイト配列を Java メソッドに渡すように設定し、画像データが正しく効率的に処理されるようにする方法を示しています。 1. Anypoint Studio で新しい Mule プロジェクトを作成し、​**HTTP Listener**​ をフローに追加します。 これは、受信ファイルアップロード要求のエントリポイントになります。 2. **\[Set Payload\]**​ 操作を ​**\[HTTP Listener\]**​ の後にドラッグします。 3. **\[Set Payload\]**​ 操作を選択し、​**\[Value (値)\]**​ で次の DataWeave ペイロードを設定します。 ```Dataweave %dw 2.0 output application/octet-stream --- payload ``` 1. **\[Java Module Invoke\]**​ 操作を ​**\[Set Payload\]**​ の後にドラッグします。 2. **\[Invoke\]**​ 操作を選択し、Java メソッドをコールするように設定します。 メソッドの署名がバイト配列をパラメーターとして受け入れることを確認します。 3. **Invoke**​ 操作の設定で、Method プロパティを、呼び出す Java メソッドの名前 (​`processImage`​ など) に設定します。 4. 受信ファイルデータを Java メソッドのバイト配列パラメーターにマップします。 DataWeave を使用して、ファイルデータをバイト配列に変換することができます。 5. 処理された画像データを処理するためのロジック (データベースへの保存や別のサービスへの送信など) を追加して、引き続き Mule フローを構築します。 **\[Configuration XML (設定 XML)\]**​ ウィンドウでは、設定は次のように記述されます。 ```xml ``` ## [](#関連情報)関連情報 - [Java Module の例](https://docs.mulesoft.com/jp/java-module/latest/java-module-examples)