Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule 4 では Mule Expression Language (MEL) が DataWeave 式言語に要素に置き換わりました。 このセクションでは、Mule アプリケーションの MEL 式を DataWeave (2.0 以降) に移行するための指針を提供します。
DataWeave は、単に値の参照と条件の評価を行う式言語として、または関数や再帰を含む複雑なデータ変換を作成するスクリプティング言語として使用できる Mule 固有の言語です。
MEL とは違い、JSON、XML、CSV など、さまざまなデータ型が標準でサポートされます。つまり、式を評価する前にデータを変更する必要がなくなりました。 また、関数のマッピングやデータの絞り込みなど、高度なユースケースもサポートされています。
DataWeave のメインデータセレクターは .
演算子であることに留意してください。
ほとんどキーワードは MEL と共有されるので、ほとんどのシナリオの構文は同じになります。たとえば、#[message.payload.name]
は両言語とも同じです。
MEL と DataWeave の主な違いは、DataWeave 式には副作用がないことです。DataWeave を使用してデータを抽出または生成できますが、データを変更することはできません。 それらのユースケースの対処法については、Java インテグレーションの例を参照してください。
以下のセクションでは、MEL の一部の使用法を Mule 4 に適応させる方法を説明します。
次の変更を除き、DataWeave ではコンテキスト変数 (Mule Runtime 変数とも呼ばれる) は同じままです。
MEL | DataWeave |
---|---|
フロー変数
|
Mule イベント変数
|
例外
|
Mule エラー:
|
インバウンド添付ファイル
|
|
インバウンドプロパティ
|
Mule メッセージ属性 (メタデータ)
|
アウトバウンド添付ファイル
|
|
アウトバウンドプロパティ
|
|
|
|
|
削除 |
レコード変数
|
Mule イベント変数
|
セッション変数
|
|
|
削除: DataWeave |
DataWeave セレクターを使用して、MEL と同様にデータを照会できます。また、JSON などの型に対応するために、さらに変換を行う必要がありません。
以下の例では、次の JSON ペイロードの ID をログに記録します。
{
"name" : "Rachel Duncan",
"id": "779H41"
}
<json:json-to-object-transformer returnClass="java.util.Map" />
<logger message="Updating health check record for subject '#[payload.id]'" level="INFO" />
<logger message="Updating health check record for subject '#[payload.id]'" />
前述のとおり、DataWeave では、MEL の expression-component
で許可されていたようなデータの変更はサポートされていません。そのようなユースケースを実行するには、Scripting Module を使用する必要があります。
Java マップとして記述されている前述のペイロードを考えてみます。例では、name
属性を変更します。
<expression-component>
<![CDATA[
payload.name = 'R. Duncan'
]]>
</expression-component>
<script:execute engine="groovy">
<script:code>
payload.put('name', 'R. Duncan')
return payload
</script:code>
</script:execute>
Scripting Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、pom.xml
ファイルで次の連動関係を追加します。
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-scripting-module</artifactId>
<version>1.1.0</version> <!-- or newer -->
<classifier>mule-plugin</classifier>
</dependency>
DataWeave を使用して静的メソッドを呼び出すことができます。通常のメソッドの場合は Java Module を使用できます。このモジュールは操作と関数の両方を公開して Java メソッドを呼び出します。
以下の例では、Java の Locale getDefault
静的メソッドを Mule 3 と Mule 4 で使用しています。
<validation:is-time time="#[payload]" pattern="h:mm a" locale="#[java.util.Locale.getDefault().getLanguage()]"/>
<validation:is-time time="#[payload]" pattern="h:mm a" locale="#[java!java::util::Locale::getDefault().getLanguage()]"/>
DataWeave では、Java 静的メソッドが検索対象であることを示す java!
プレフィックスと、完全修飾された (.
ではなく、::
区切りの) クラス名が必要です。
以下の例は、Mule 3 と Mule 4 での Java の String equalsIgnoreCase
メソッドの使用法を示しています。
<choice>
<when expression="#[payload.equalsIgnoreCase('error')]">
<logger message="An error message has been received." level="ERROR"/>
</when>
<otherwise>
<logger message="Message received: #[payload]" level="INFO"/>
</otherwise>
</choice>
<choice doc:name="Choice">
<when expression="#[Java::invoke('java.lang.String', 'equalsIgnoreCase(String)', payload, {arg0: 'error'})]">
<logger message="An error message has been received." level="ERROR"/>
</when>
<otherwise >
<logger message="Message received: #[payload]" level="INFO"/>
</otherwise>
</choice>
Java Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、pom.xml
ファイルで次の連動関係を追加します。
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-java-module</artifactId>
<version>1.0.0</version> <!-- or newer -->
<classifier>mule-plugin</classifier>
</dependency>
enricher
は削除されて、すべての操作でサポートされる対象変数に置き換わりました。以下の例は、Mule 3 と Mule 4 で操作の結果を変数に送信する方法を示しています。
<enricher target="#[flowVars.response]">
<http:request config-ref="HTTP_Request_Configuration" path="/get" method="GET"/>
</enricher>
<http:request config-ref="HTTP_Request_Configuration" path="/get" method="GET" target="response"/>
詳細は、「対象変数を使用したデータのエンリッチ」を参照してください。
DataWeave では、セレクターを使用して XML コンテンツを照会できますが、XML Module を使用することもできます。このモジュールは操作と関数の両方を公開して XPath クエリを実行します。
以下の例は、Mule 3 と 4 で、変数から取得された特定の単語を含む行を取得する方法を示しています。
<set‐variable variableName="word" value="handkerchief"/>
<expression‐transformer>
xpath3('//LINE[contains(.,$word)]',payload,'NODESET')
</expression‐transformer>
<set‐variable variableName="word" value="handkerchief"/>
<set-payload value="#[XmlModule::xpath('//LINE[contains(., \$word)]', payload, {'word': vars.word})]" />
XML Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、pom.xml
ファイルで次の連動関係を追加します。
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-xml-module</artifactId>
<version>1.1.0</version> <!-- or newer -->
<classifier>mule-plugin</classifier>
</dependency>
DataWeave のマッチング関数 match
と matches
を代わりに使用できます (コア DataWeave 関数を参照してください)。次の例は、DataWeave で正規表現を使用して、wildcard
MEL 関数の使用を置き換える方法を示しています。
<choice>
<when expression="#[wildcard('Hello *')]">
<set-payload value="Hello, how can I help?"/>
</when>
<otherwise>
<set-payload value="Courtesy requires a greeting."/>
</otherwise>
</choice>
<choice doc:name="Choice">
<when expression="#[payload matches /Hello\s[A-z]+/]">
<set-payload value="Hello, how can I help?"/>
</when>
<otherwise >
<set-payload value="Courtesy requires a greeting."/>
</otherwise>
</choice>