組み込みの 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 関数で実行したりできます。
-
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 スクリプトでそのモジュールにアクセスして使用できるようになります。
-
-
次のように、マッピングファイルで関数を作成します。
例: マッピングファイルのコンテンツ%dw 2.0 import dw::core::Strings fun capitalizeKey(value:String) = Strings::capitalize(value) ++ "Key" --- payload mapObject ((value, key) -> { (capitalizeKey(key as String)) : value } ) -
DWL 関数モジュールファイルを保存します。
DataWeave スクリプトでのマッピングファイルの使用
マッピングファイルを使用するには、DataWeave スクリプトにインポートし、マッピングファイルで main 関数を使用してスクリプトの本文にアクセスする必要があります。
このスクリプトが含まれる MyMapping.dwl ファイルが /src/main/resources/modules に作成されていることが前提となっています。
MyMapping.dwl ファイル (上記) の本文の式を DataWeave マッピングファイルにインポートして使用するには、次の作業が必要になります。
-
ヘッダーで
import ディレクティブを指定します。 -
MyMapping::main 関数を呼び出します。この関数では、マッピングファイルと同じ構造の入力を想定しています。たとえば、MyMapping.dwl の本文では、{"key" : "value"} の形式のオブジェクトを想定しています。
%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 マッピングファイルを作成して使用するを参照してください。)
カスタムモジュールファイルには、次のように var、fun、type、ns 宣言のみを含めることができます。
%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 の関数をコールする。
%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 ファイル」を参照してください。