Flex Gateway新着情報
Governance新着情報
Monitoring API Manager組み込みの 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 変換を .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 スクリプトにインポートし、マッピングファイルで 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 ファイルは、Mule Connector およびコンポーネントで直接使用できます。
詳細は、「dwl ファイル」を参照してください。