カスタムモジュールおよびマッピングの作成

組み込みの DataWeave 関数モジュール (​dw::Core​ や ​dw::Crypto​ など) を使用する以外にも、カスタムモジュールおよびマッピングファイルを作成して使用することもできます。 例は、データ抽出および変換の一般的なアプローチを示しています。 開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの ​DataWeave バージョン 1 ドキュメントセット​を参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。

DataWeave 言語 (​.dwl​) ファイルでモジュールおよびマッピングファイルを作成し、Mule コンポーネントの DataWeave スクリプトで Mule アプリケーションにインポートします。モジュールとマッピングファイルのどちらも、同じ機能を何度も再利用する必要がある場合に役立ちます。

  • カスタムモジュールでは、関数、変数、型、名前空間を定義できます。これらのモジュールを DataWeave スクリプトにインポートして機能を使用できます。

  • カスタムマッピングファイルは、インポートして別の DataWeave スクリプトで使用したり、Mule コンポーネントで参照したりできる完全な DataWeave スクリプトが含まれるモジュールの種類です。

多くの Mule Connector およびコンポーネントの項目では、DataWeave 式やスクリプトを使用できます。

カスタムモジュールではなく、組み込みの DataWeave 関数モジュールをインポートして使用する場合、​「DataWeave 関数リファレンス」​を参照してください。

DataWeave マッピングファイルを作成して使用する

DataWeave 変換を ​.dwl​ マッピングファイル (マッピングモジュール) に保存し、そのファイルを別の DataWeave スクリプトにインポートできます。マッピングファイルは、Transform Message コンポーネントで実行したり、別のマッピングにインポートして ​main​ 関数で実行したりできます。

例: DataWeave マッピングファイル
Figure 1. 例: Studio プロジェクトの DataWeave マッピングファイル
  1. Studio プロジェクトで、マッピングモジュールのサブフォルダーとファイルをセットアップします。

    • src/main/resources​ にサブフォルダーを作成するには、[New (新規)] → [Folder (フォルダー)] → [your_project] → ​src/main/resources​ に移動して、​modules​ という名前のフォルダーを追加します。

    • そのフォルダーのモジュールの新しいファイルを作成するには、[New (新規)] → [File (ファイル)] → [your_project] → ​src/main/resources/modules​ に移動し、​MyMapping.dwl​ のような DWL (DataWeave 言語) ファイルを追加します。

      src/main/resources​ 内にモジュールを保存すると、そのプロジェクトの Mule アプリケーションの コンポーネントの DataWeave スクリプトでそのモジュールにアクセスして使用できるようになります。

  2. 次のように、マッピングファイルで関数を作成します。

    例: マッピングファイルのコンテンツ
    %dw 2.0
    import dw::core::Strings
    fun capitalizeKey(value:String) = Strings::capitalize(value) ++ "Key"
    ---
    payload mapObject ((value, key) ->
        {
          (capitalizeKey(key as String)) : value
        }
      )
  3. DWL 関数モジュールファイルを保存します。

DataWeave スクリプトでのマッピングファイルの使用

マッピングファイルを使用するには、DataWeave スクリプトにインポートし、マッピングファイルで ​main​ 関数を使用してスクリプトの本文にアクセスする必要があります。

このスクリプトが含まれる ​MyMapping.dwl​ ファイルが ​/src/main/resources/modules​ に作成されていることが前提となっています。

MyMapping.dwl​ ファイル (上記) の本文の式を DataWeave マッピングファイルにインポートして使用するには、次の作業が必要になります。

  • ヘッダーで ​import​ ディレクティブを指定します。

  • MyMapping::main​ 関数を呼び出します。この関数では、マッピングファイルと同じ構造の入力を想定しています。たとえば、​MyMapping.dwl​ の本文では、​{"key" : "value"}​ の形式のオブジェクトを想定しています。

例: DataWeave スクリプトにマッピングをインポートして使用する
%dw 2.0
import modules::MyMapping
output application/json
---
MyMapping::main(payload: { "user" : "bar" })

次に、結果を示します。

出力
{
  "UserKey": "bar"
}

capitalizeKey​ 関数は非公開でも ​main​ 関数コールで使用されます。また、DataWeave マッピングファイルで ​dw::core::Strings​ モジュールをインポートして再利用することもできます。

カスタムモジュールの作成および使用

カスタム DataWeave モジュールを作成する手順は、カスタムマッピングファイルを作成する手順とほぼ同じです。​.dwl​ ファイルのコンテンツのみが異なります。一般的な DataWeave スクリプトまたはマッピングファイルとは異なり、カスタム DataWeave モジュールでは、ヘッダーセクションと本文セクションの間に ​output​ ディレクティブ、本文の式、区切り文字 (​---​) を含めることができません。マッピングに関する指針については、「​DataWeave マッピングファイルを作成して使用する​」を参照してください。

例: DataWeave カスタム関数モジュール
Figure 2. 例: Studio プロジェクトのカスタムモジュール

カスタムモジュールファイルには、次のように ​var​、​fun​、​type​、​ns​ 宣言のみを含めることができます。

例: カスタム DataWeave モジュール
%dw 2.0
fun myFunc(myInput: String) = myInput ++ "_"
var name = "MyData"
ns mynamespace http://acme.com/bar

カスタムモジュールを別の DataWeave スクリプトにインポートすると、モジュールで定義された関数、変数、型、名前空間を DataWeave 本文で使用できるようになります。次の例では、DataWeave スクリプトで以下の作業を行います。

  • ヘッダーの ​import​ ディレクティブでモジュール ​MyModule​ をインポートする。この場合、インポートされたモジュールは Studio プロジェクトパス ​src/main/resources/modules/MyModule.dwl​ に保存されます。

  • MyModule::myFunc("dataweave")​ を使用して ​MyModule​ の関数をコールする。

例: カスタム DataWeave モジュールをインポートして使用する
%dw 2.0
import modules::MyModule
output application/json
---
MyModule::myFunc("dataweave") ++ "name"

いくつかの方法でモジュールまたは要素をインポートできます。

  • モジュールをインポートする (例: import modules::MyModule​)。この場合、要素 (ここでは関数) をコールするときに ​MyModule::myFunc​ のようにモジュールの名前を含める必要があります。

  • モジュールのすべての要素をインポートする (例: import * from modules::MyModule​)。この場合、要素をコールするときにモジュールの名前を含める必要はありません。たとえば、​myFunc("dataweave") ++ "name"​ は動作します。

  • モジュールの特定の要素をインポートする (例: import myFunc from modules::MyModule​)。この場合、要素をコールするときにモジュールの名前を含める必要はありません。たとえば、​myFunc("dataweave") ++ "name"​ は動作します。たとえば、​import myFunc someOtherFunction from modules::MyModule​ (モジュールで ​myFunc​ と ​someOtherFunction​ の両方が定義されていることが前提) のようにモジュールの複数の要素をインポートできます。

出力
"dataweave_name"

インポートされる要素のローカル別名の割り当て

名前のクラッシュを避けるために、モジュールを DataWeave スクリプトにインポートするときに ​as​ を使用してカスタムモジュールまたはその要素の別名を割り当てることができます。

MyModule.dwl​ ファイルで次のようなカスタムモジュールを定義していることが前提となっています。

例: カスタムモジュール
%dw 2.0
fun myFunc(name:String) = name ++ "_"
var myVar = "Test"

カスタムモジュールを DataWeave スクリプトにインポートするときに、次のようにカスタムモジュールの要素の別名を作成できます。

例: インポートされる要素に別名を適用する
%dw 2.0
import myFunc as appendDash, myVar as weaveName from modules::MyModule
var myVar = "Mapping"
output application/json
---
appendDash("dataweave") ++ weaveName ++ "_" ++ myVar

このスクリプトでは ​"dataweave_Test_Mapping"​ を返します。

次のようにインポートされるモジュールの別名を作成できます。

例: インポートされるモジュールに別名を適用する
%dw 2.0
import modules::MyModule as WeaveMod
output application/json
---
WeaveMod::myFunc("dataweave")

DWL ファイルの参照

DWL ファイルは、Mule Connector およびコンポーネントで直接使用できます。

詳細は、​「dwl ファイル」​を参照してください。