Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポートが終了しました。 このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。 標準サポートが適用されている最新バージョンの Mule 4 にアップグレードすることをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。 |
DataWeave 2.0 セレクターはオブジェクトと配列の構造をトラバースし、一致する値を返します。 開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの DataWeave 1.0 ドキュメントセットを参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。
セレクターは常にコンテキスト内で動作し、コンテキストには、変数への参照、オブジェクトリテラル、配列リテラル、または DataWeave 関数の呼び出しとすることができます。
セレクター種別 | 構文 | 戻り値のデータ型 |
---|---|---|
単一値 |
|
一致するキーに属する値の任意の型 |
複数値 |
|
すべての一致するキーの値の配列 |
下位 |
|
すべての一致する下位キーの値の配列 |
動的 |
動的セレクター を参照してください。 |
|
キー-値ペア |
|
一致するキーを持つオブジェクト |
Index (インデックス) |
|
選択された配列インデックスの位置にある任意の型の値 |
範囲 |
|
選択されたインデックスからの値を含む配列 |
XML 属性 |
|
選択された属性の文字列値 |
Namespace (名前空間) |
|
選択されたキーの名前空間の文字列値 |
キーの存在 |
|
ブール (オブジェクトまたは XML 属性の選択されたキーが存在する場合は |
アサートの存在 |
|
文字列: キーが存在しない場合の例外メッセージ |
検索条件 |
|
DataWeave 式が |
メタデータ |
|
Mule ペイロード、変数、属性の指定したメタデータの値を返します。セレクターは、クラス ( |
以下の例では、これらのセレクターを使用しています。その他の例については、「データの抽出」を参照してください。 |
DataWeave では、オブジェクトのキー (たとえば JSON オブジェクト { "someName" : "Data Weave" }
のキー "someName"
) と一致する名前が、そのオブジェクトからデータを選択できます。シンプルな例については、単一値セレクター を参照してください。
このセレクターは、指定されたセレクター名にキーが一致した最初のキー/値ペアの値と一致します。このセレクターは、オブジェクトまたは配列に適用できます。配列の場合は、配列内のすべてのオブジェクト値にセレクターが適用され、オブジェクト値以外の値はすべて無視されます。一致するキーがない場合は、値 null
が返されます。
次の例は、単一の JSON オブジェクトに対するセレクターの働きを示しています。
DataWeave 名前空間セレクターは、名前空間またはローカル部分と一致する名前の使用をサポートします。セレクターが名前空間と一致するためには、名前が名前空間およびローカル部分と一致する必要があります。ローカル部分としか一致しない場合、名前空間とは関係なく、セレクターはそのローカル部分を持つすべての名前空間と一致します。
XML 名前空間とそれぞれのプレフィックスは、XML 要素の xmlns
属性に定義されています。たとえば、<h:table xmlns:h="http://www.w3.org/TR/html4/"/>
は、プレフィックス h
を名前空間 http://www.w3.org/TR/html4/
に割り当てる名前空間を定義します。
その名前空間内のすべての要素は h
プレフィックスを持ちます。たとえば、要素 <h:table/>
では、h
が名前空間のプレフィックスで、table
がローカル部分になります。
次の例では、名前空間とローカル部分を使用して、XML 要素から値を選択しています。
入力ペイロードには、ローカル名 (table
) が同じで異なる名前空間を持つ XML 要素 h:table
と f:table
が含まれます。
<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:tr>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:tr>
</f:table>
</root>
この DataWeave スクリプトは、指定された名前空間から XML コンテンツを選択します。スクリプトのヘッダーは、名前空間 (ns
) の変数 html
と furniture
を作成し、入力ペイロードからの名前空間を格納します。要素 h:table
の子を選択して要素 a
に格納し、要素 f:table
の子を選択して要素 b
に格納するため、スクリプトは名前空間変数の html
と furniture
で名前空間セレクター (#
) とローカル部分 (table
) を使用します。
%dw 2.0
output application/xml
ns html http://www.w3.org/TR/html4/
ns furniture https://www.w3schools.com/furniture
---
root: {
a: payload.root.html#table,
b: payload.root.furniture#table
}
次のスクリプトは、要素 a
では要素 h:table
の子を出力し、要素 b
では要素 f:table
の子を出力します。
<?xml version='1.0' encoding='UTF-8'?>
<root>
<a>
<h:tr xmlns:h="http://www.w3.org/TR/html4/">
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</a>
<b>
<f:tr xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:tr>
</b>
</root>
次の例では、ローカル名 table
を使用して h:table
要素から XML 値を選択しています。
入力ペイロードには、名前空間 "http://www.w3.org/TR/html4/"
を含む table
要素を持つ XML が含まれます。
<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
</root>
複数値セレクター (*
) は、オブジェクトの配列で最初に一致したキーの値を返すのではなく、一致するキーに対する値を含む配列 (たとえば、user
がキーである場合は *user
) を返します。このセレクターは、子孫の値は返さず、指定されたレベルの値のみを返します。どのキーも一致しない場合は値 null
を返します。
入力ペイロードには user
要素の XML 配列が含まれます。
<users>
<user>Weave</user>
<user>BAT</user>
<user>TF</user>
</users>
子孫セレクターは、すべての子とそれぞれの子孫のリストを返します。
このセレクターは、.
を 1 つ使用することで他のどのセレクターとも連結できます。たとえば、payload..
は、すべての子の値、さらにそれぞれの子の値と、すべての子孫の値を再帰的に選択して、それらの値の配列を返します。セレクターは、他の要素と連結することもできます。たとえば、payload..user
と指定すると、各 user
キーの値と、それぞれの子孫の値がすべて選択されます。または payload..*name
と指定すると、name
のすべての子孫の値が選択されます。
次の例では、入力ペイロードの各子孫を選択しています。
入力ペイロードには、異なるレベルでネストされている要素のセットが含まれます。
<users>
<user>
<name>Weave</name>
<user>
<name>BAT</name>
<user>
<name>BDD</name>
</user>
</user>
</user>
</users>
次の例では、name
の値を降順に選択しています。
入力ペイロードには、異なるレベルでネストされている name
要素のセットが含まれます。
<users>
<user>
<name>Weave</name>
<user>
<name>BAT</name>
<name>Munit</name>
<user>
<name>BDD</name>
</user>
</user>
</user>
</users>
次の例では、name
の値を降順に選択しています。
入力ペイロードには、異なるレベルでネストされている name
要素のセットが含まれます。
<users>
<user>
<name>Weave</name>
<user>
<name>BAT</name>
<name>Munit</name>
<user>
<name>BDD</name>
</user>
</user>
</user>
</users>
動的セレクターの構文は、選択する対象によって異なります。
単一値: payload[(nameExpression)]
複数値: payload[*(nameExpression)]
属性: payload[@(nameExpression)]
キー値: payload[&(nameExpression)]
名前空間を持つ単一値: payload.ns0#"$(nameExpression)"
次の例は、単一値を動的に選択する方法を示しています。
入力ペイロードはオブジェクトの配列になります。最初のオブジェクトは、キー "ref"
と値 "name"
を持ちます。2 番目のオブジェクトは、キー "name"
と値 "Data Weave"
を持ちます。:
{ "ref": "name", "name": "Data Weave" }
次の例は、名前空間を持つ単一値を動的に選択する方法を示しています。
入力ペイロードには、2 つの子要素を持ち、それらの片方が名前空間 http://www.w3.org/TR/html4/
である <root/>
要素が 1 つ含まれます。両方の子要素 (<f:table/>
と <h:table>
) はローカル名の table
を持ちます。
<root ref="table">
<f:table xmlns:f="https://www.w3schools.com/furniture">Manzana</f:table>
<h:table xmlns:h="http://www.w3.org/TR/html4/">Banana</h:table>
</root>
この DataWeave スクリプトは、名前空間 http://www.w3.org/TR/html4/
を持つ要素の値を動的に選択します。
%dw 2.0
output application/json
ns h http://www.w3.org/TR/html4/
---
payload.root.h#"$(payload.root.@ref)"
式 payload.root.@ref
では、root
要素の ref
属性に対して属性セレクター (@
) を使用して、要素 <h:table xmlns:h="http://www.w3.org/TR/html4/">Banana</h:table>
のローカル名 table
と一致する値 table
を選択しています。
すべてのセレクターが、定義済みの Mule Runtime 変数 (payload
、attributes
など) および DataWeave 変数で機能します。たとえば、var myVar = { "id" : "1234", "name" : "somebody" }
として定義された DataWeave 変数があるとします。DataWeave 式 myVar.name
は "name"
の値を返し、その値は "somebody"
です。
Mule Runtime 変数を使用することで、Mule イベントデータを選択できます。
抽出された値は、サポートされる DataWeave 値の型のいずれかのリテラル値 (たとえば、変数とは対照的) として処理されます。
抽出するデータ | 構文 |
---|---|
ペイロード |
Mule ペイロードについての詳細は、「メッセージペイロード」を参照してください。 |
属性 |
例については、「属性」を参照してください。 |
変数 |
名前の競合を回避するには、
Muke 変数についての詳細は、「Mule アプリケーションの変数」を参照してください。 |
エラーオブジェクト |
フローでのエラーに関する情報については、 |
フロー |
Logger でのフロー名:
フローについての詳細は、「フローおよびサブフロー」を参照してください。 |