Mule データ型

Mule Runtime Engine では、さまざまなコンポーネントのデータアクセスを一元化する ​TypedValue​ という型付けされたデータ構造を使用します。このデータ構造は実際のデータとそのデータ型の両方へのアクセスを提供します。データ型は 2 つの値 (MIME タイプとデータのエンコード) で構成されます。

入力データ

Mule は ​TypedValue​ データ構造を使用してすべての変数とペイロードを保存します。また、Anypoint Platform File Connector からの ​List​ のような操作では、結果が ​TypedValue​ インスタンスで返されるため、DataWeave は読み込むさまざまな種別のファイル (JSON、XML、CSV など) をリストできます。

出力データ

DataWeave では常に ​TypedValue​ インスタンスが出力されます。また、使用するライターが ​TypedValue​ インスタンスのデータ型に基づいて判断されます。ただし、DataWeave スクリプトで ​output​ ディレクティブを使用してデータ型を手動で指定できます。 Mule が実行しているスクリプトがメッセージ処理項目に割り当てられている場合、Mule から DataWeave にその項目のメタデータに基づいてどのデータ型を想定すべきかが伝えられます。たとえば、データ型が Plain Old Java Object (Pojo) の場合、DataWeave はインスタンス化するクラスだけでなく、Java ライターを使用して出力を生成する必要があることも把握できます。

DataWeave での Mule データ型の使用方法

DataWeave は ​TypedValue​ インスタンスに含まれるデータ型を使用し、MIME タイプに基づいて使用すべきリーダー、MIME タイププロパティに基づいてそのリーダーの設定方法 (エンコード、リーダープロパティ) を決定します。 データ型を決定できない場合、DataWeave は次の手順に従います。

  1. スクリプトが使用している入力種別を確認する。

    すべての入力が互換か同じデータ型の場合、DataWeave はそのデータ型を使用します。たとえば、スクリプトに ​<set-payload value="#[payload.someValue]/>​ が含まれている場合、DataWeave はそのペイロードのデータ型を調べ、ペイロードが JSON であれば JSON ライターを使用します。スクリプトに異なるデータ型から複数の入力がある場合、DataWeave はエラーをスローします。

    たとえば、スクリプトに ​<set-payload value="#[payload.someValue ++ vars.myVar]/>​ が含まれていて、その ​vars.myBar​ が XML 型で ​payload​ が JSON 型の場合、DataWeave はエラーをスローします。場合によっては、特に XML を操作するときには、Set Payload 操作の式は、無効な XML 構造が生成されたために失敗します。

  2. 入力が使用されない場合、DataWeave は Java ライターを使用する。

    たとえば、DataWeave がスクリプト ​<set-payload value="#[\{a: true}]/>​ を読み込むとき、Java ライターを使用して ("a", true) が含まれるエントリで ​java.util.Map​ オブジェクトを出力します。

    Logger メッセージプロセッサーの場合、DataWeave には出力作成時のエラーを回避するための特別な機能があります。まず、スクリプトが使用している入力種別の判別を試みてから、対応するライターを使用して出力を生成します。ライターがデータ構造を作成できないために DataWeave が失敗すると、次は有効なデータ構造を出力できる DataWeave ライターが使用されます。