DataWeave の出力形式とライタープロパティ

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

DataWeave では、JSON、XML など、多くの種別のデータ形式を読み書きできます。 開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの ​DataWeave 1.0 ドキュメントセット​を参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。

DataWeave では、以下の形式 (または MIME タイプ) が入力および出力としてサポートされます。

MIME タイプ サポートされる形式

application/avro

Avro

application/csv

CSV

application/dw

DataWeave (weave)​ (DataWeave 式のテスト用)

application/flatfile

フラットファイル​、​Cobol コピーブック​、​固定幅

application/java

Java​、​Enum カスタム型 (Java)

application/json

JSON

application/octet-stream

オクテットストリーム​ (バイナリ)

application/yaml

YAML

application/xml

XML​、​CData カスタム型 (XML)

application/x-ndjson

改行区切りの JSON​ (改行区切りの JSON)

application/xlsx

Excel

application/x-www-form-urlencoded

URL エンコード

multipart/*

マルチパート (フォームデータ)

text/plain

テキスト/プレーン​ (プレーンテキスト)

text/x-java-properties

テキスト Java プロパティ​ (プロパティ)

DataWeave リーダーおよびライター

DataWeave は、入力データ全体をメモリ内でインデックス付きで読み取ることができます。また、データ形式によっては、入力をストリーミングして部分ごとに読み取ることもできます。大きなファイルを読み取る場合、メモリ不足になったり、パフォーマンスが低下したりする可能性があります。ストリーミングはパフォーマンスを向上する可能性がありますが、ファイルへのアクセスに影響します。

  • インデックス付きおよびメモリ内: このどちらの戦略でもドキュメント全体が解析されるため、データへのランダムアクセスが可能です。これらの戦略では、DataWeave スクリプトで結果値の任意の部分にいつでもアクセスできます。

    • インデックス付き: ディスク上でインデックスを使用します。

    • メモリ内: メモリ内でドキュメント全体を解析します。

  • ストリーミング: ファイルへの順次アクセスが可能です。この戦略では、入力ドキュメントを小さな項目に分割し、そのデータに順次アクセスして、現在の項目をメモリ内に保存します。DataWeave セレクターは、読み取られているファイルの部分にアクセスできます。DataWeave は、次のいくつかの形式でストリーミングをサポートします。

リーダーとライターのプロパティの使用

場合によって、形式固有のプロパティを使用して、形式の各側面を変更または指定することが必要になることがあります。たとえば、​separator​ (または区切り文字) など、CSV ファイルで使用する、CSV の入力および出力プロパティを指定できます。 Cobol コピーブックでは、​schemaPath​ プロパティを使用して、スキーマファイルへのパスを指定する必要があります。

Mule アプリケーション内の特定のコンポーネントの MIME タイプ (​outputMimeType​) 属性にリーダープロパティを追加できます。Listeners および Read 操作ではこの設定が受け入れられます。たとえば、この新規ファイルリスナーの例では、CSV 入力ファイルの ​,​ 区切り文字を識別します。

例: CSV リーダーのプロパティ
<file:listener doc:name="On New File" config-ref="File_Config" outputMimeType='application/csv; separator=","'>
  <scheduling-strategy >
    <fixed-frequency frequency="45" timeUnit="SECONDS"/>
  </scheduling-strategy>
  <file:matcher filenamePattern="comma_separated.csv" />
</file:listener>

上記の ​outputMimeType​ 設定は、ライターではなく CSV ​リーダー​が ​comma_separated.csv​ 入力ファイルの形式と区切り文字を解釈するのに役立ちます。

出力形式を指定するには、File Write 操作で使用する CSV または JSON ライターなど、ライターの MIME タイプと任意のライタープロパティを提供できます。たとえば、CSV 出力のペイロードで、入力で使用する他の区切り文字ではなくパイプ (​|​) 区切り文字を記述しなければならない場合があります。これを行うには、プロパティとその値を DataWeave 式の ​output​ ディレクティブに追加します。たとえば、次の Write 操作ではパイプを ​separator​ として指定しています。

例: CSV ライターの出力ディレクティブ
<file:write doc:name="Write" config-ref="File_Config" path="my_transform">
  <file:content ><![CDATA[#[output application/csv separator="|" --- payload]]]></file:content>
</file:write>

以下のセクションで、サポートされる各形式で使用可能な形式固有のリーダープロパティとライタープロパティについて説明します。

MIME タイプの設定

Mule アプリケーションを流れる入力および出力データで MIME タイプを指定できます。

DataWeave 変換の場合、出力データで MIME タイプを指定できます。 たとえば、Transform Message コンポーネントまたは Write 操作内の式の ​output​ ヘッダーディレクティブを ​output application/json​ または ​output application/csv​ に設定できます。

この例では、File Write 操作を使用して MIME タイプを設定し、形式固有のライター (CSV ライター) がペイロードを CSV 形式で出力するようにします。

例: CSV ライターの MIME タイプ
<file:write doc:name="Write" config-ref="File_Config" path="my_transform">
  <file:content ><![CDATA[#[output application/csv --- payload]]]></file:content>
</file:write>

入力データの場合、Mule ソースの形式固有のリーダー (新規ファイルリスナーなど)、Mule 操作 (Read、HTTP Request 操作など)、および DataWeave 式では、Mule イベントの入力ペイロード、属性、および変数に関連付けられるメタデータから MIME タイプが推定されます。MIME タイプをメタデータから推定できない場合 (およびそのメタデータが静的でない場合)、Mule ソースおよび操作では、リーダーの MIME タイプを指定することができます。たとえば、新規ファイルリスナーの MIME タイプを CSV ファイルの​入力​用の ​outputMimeType='application/csv'​ に設定できます。この設定では、ファイル形式に関する情報が CSV リーダーに提供されます。

例: CSV リーダーの MIME タイプ
<file:listener doc:name="On New File"
  config-ref="File_Config"
  outputMimeType='application/csv'>
</file:listener>

形式間の変換を実行するのにリーダー設定は使用​されません​。リーダー設定は、リーダーが入力の形式を解釈できるようサポートするのみです。

また、ソース、操作、またはコンポーネントの形式固有のリーダーまたはライターで使用する、リーダーとライターの特別なプロパティを設定することもできます。 「​リーダーとライターのプロパティの使用​」を参照してください。

Avro

MIME タイプ: application/avro

Avro はデータシリアル化システムです。

ライタープロパティ (application/avro)

DataWeave スクリプトで ​output​ 形式として ​application/avro​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

schemaUrl

String (文字列)

指定されたデータ構造の null 値をスキップします。 デフォルトでは、スキップしません。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

リーダープロパティ (application/avro)

DataWeave リーダーの ​application/avro​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

schemaUrl

String (文字列)

指定されたデータ構造の null 値をスキップします。 デフォルトでは、スキップしません。

Cobol コピーブック

MIME タイプ: application/flatfile

Cobol コピーブックは、Cobol データファイルのレコードと項目のレイアウトを記述するフラットファイルの種別です。

Transform Message コンポーネントは、Cobol コピーブック形式を処理するための設定を提供します。たとえば、Cobol 定義を Transform Message コンポーネントにインポートしてコピーブック変換で使用できます。

DataWeave の Cobol コピーブックは最大 15 MB のファイルをサポートし、メモリ要件は約 40 対 1 です。たとえば、1 MB のファイルは処理に最大 40 MB のメモリを必要とするため、大きいコピーブックファイルに対する TPS のニーズと組み合わせてこのメモリ要件を考慮することが重要です。これは正確な数値ではありません。この値は、マッピング命令の複雑さによって異なる可能性があります。

コピーブック定義のインポート

コピーブック定義をインポートすると、Transform Message コンポーネントは、​schemaPath​ プロパティで参照できるフラットファイルスキーマに定義を変換します。

コピーブック定義をインポートする方法

  1. Studio で Transform コンポーネントの入力ペイロードを右クリックし、[Set Metadata (メタデータを設定)] を選択して [Set Metadata Type (メタデータ型を設定)] ダイアログを開きます。

    コピーブック定義をインポートする前に、メタデータ型を定義する必要があります。

  2. コピーブックメタデータの名前を入力します (例: copybook​)。

  3. [Type (型)] ドロップダウンメニューから [Copybook (コピーブック)] 型を選択します。

  4. コピーブック定義ファイルをインポートします。

  5. [Select (選択)] をクリックします。

    コピーブック定義のインポート
    Figure 1. コピーブック定義ファイルのインポート

たとえば、次のようなコピーブック定義ファイル (​mailing-record.cpy​) があるとします。

       01  MAILING-RECORD.
           05  COMPANY-NAME            PIC X(30).
           05  CONTACTS.
               10  PRESIDENT.
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
               10  VP-MARKETING.
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
               10  ALTERNATE-CONTACT.
                   15  TITLE           PIC X(10).
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
           05  ADDRESS                 PIC X(15).
           05  CITY                    PIC X(15).
           05  STATE                   PIC XX.
           05  ZIP                     PIC 9(5).
  • コピーブック定義は常に ​01​ エントリから始まる必要があります。コピーブック内の ​01​ 定義ごとに個別のレコードタイプが生成されます (コピーブックを使用できるようにするには 1 つ以上の ​01​ 定義が存在する必要があります。定義がない場合は、任意の名前を使用して、コピーブックの開始位置に定義を追加します)。コピーブックファイルに複数の ​01​ 定義がある場合、変換で使用する定義をドロップダウンリストから選択できます。

  • COBOL 形式では、各行の列 7 ~ 72 のみを使用するように定義する必要があります。列 1 ~ 5 と列 72 より後のデータは、インポートプロセスで無視されます。列 6 は、行継続マーカーです。

スキーマをインポートすると、Transform コンポーネントは、Muke プロジェクトの ​src/main/resources/schema​ フォルダーに保存しているフラットファイルスキーマにコピーブックファイルを変換します。フラットファイル形式では、上記のコピーブック定義は次のようになります。

form: COPYBOOK
id: 'MAILING-RECORD'
values:
- { name: 'COMPANY-NAME', type: String, length: 30 }
- name: 'CONTACTS'
  values:
  - name: 'PRESIDENT'
    values:
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
  - name: 'VP-MARKETING'
    values:
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
  - name: 'ALTERNATE-CONTACT'
    values:
    - { name: 'TITLE', type: String, length: 10 }
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
- { name: 'ADDRESS', type: String, length: 15 }
- { name: 'CITY', type: String, length: 15 }
- { name: 'STATE', type: String, length: 2 }
- { name: 'ZIP', type: Integer, length: 5, format: { justify: ZEROES, sign: UNSIGNED } }

コピーブックをインポートしたら、​schemaPath​ プロパティを使用して ​output​ ディレクティブを介して関連付けられているフラットファイルを参照できます。たとえば、​output application/flatfile schemaPath="src/main/resources/schemas/mailing-record.ffd"​ です。

サポートされるコピーブック機能

すべてのコピーブック機能が DataWeave の Cobol コピーブック形式でサポートされるとは限りません。一般に、この形式では次を含む最も一般的な使用方法と簡単なパターンがサポートされます。

  • DISPLAY、BINARY (COMP)、COMP-5 および PACKED-DECIMAL (COMP-3) の使用方法。 文字エンコードの制限については、「​文字エンコード​」を参照してください。

  • 以下のみで構成される数値の PICTURE 句

    • 「9」- 1 つ以上の数字位置

    • 「S」- 1 つの省略可能な符号文字位置 (先頭または末尾)

    • 「V」- 1 つの省略可能な小数点

    • 「P」- 1 つ以上の 10 進数位取り位置

  • 「X」文字位置のみで構成される英数字値の PICTURE 句

  • PICTURE 句での「9」、「P」、および「X」文字の反復数 (5 桁数値の場合の ​9(5)​ など)

  • スキーマの controlVal プロパティが含まれる OCCURS DEPENDING ON。含まれる構造内で制御値がネストされている場合、生成されたスキーマを手動で変更して、「container.value」の値のフルパスを指定する必要があります。

  • REDEFINES 句 (レコードデータの同じ部分の異なるビューを提供するために使用 - 以下のセクションの詳細を参照)

次の機能は​サポートされていません​。

  • 英数字で編集された PICTURE 句

  • 挿入、置換、およびゼロサプレスのすべての形式を含む、数値で編集された PICTURE 句

  • 特殊なレベル番号:

    • レベル 66 - 項目またはグループの代替名

    • レベル 77 - 独立データ項目

    • レベル 88 - 条件名 (値の列挙に相当)

  • グループレベルの SIGN 句 (PICTURE 句を含む基本項目でのみサポートされます)

  • COMP-1 または COMP-2 の USAGE、およびグループレベルの USAGE 句 (PICTURE 句を含む基本項目でのみサポートされます)

  • VALUE 句 (リテラルまたは別のデータ項目からデータ項目または条件名の値を定義するために使用)

  • SYNC 句 (レコード内で値を一致させるために使用)

REDEFINES のサポート

REDEFINES は、レコードのデータの動的な解析を促進します。REDEFINES を指定してコピーブックをインポートする場合、生成されたスキーマでは、「​」 (同じレベルで複数の REDEFINES グルーピングが指定される場合は、「​1」、「*2」など) という名前の特殊なグルーピングを使用して、異なるすべての解析を結合します。この特殊なグルーピング名は、他のグルーピング名と同様に DataWeave 式で使用します。

REDEFINES グルーピングを使用すると、通常のコピーブックグルーピングよりもオーバーヘッドが大きくなるため、可能な場合は Studio にインポートする前にコピーブックから REDEFINES を削除することをお勧めします。

文字エンコード

BINARY (COMP)、COMP-5、または PACKED-DECIMAL (COMP-3) の使用方法は、256 個の文字コード候補の範囲全体を使用する 1 バイト文字エンコードでのみサポートされます。これらの使用方法では、UTF-8 と他の可変長エンコードはサポートされません (1 バイトではないため)。また、ASCII もサポートされません (範囲全体を使用しないため)。サポートされている文字エンコードには、ISO-8859-1 (完全な 8 ビットへの ASCII の拡張) や他の 8859 バリエーションおよび EBCDIC (IBM037) などがあります。

REDEFINES では、データに 1 バイト/文字の文字エンコードを使用する必要がありますが、BINARY、(COMP)、COMP-5、PACKED-DECIMAL (COMP-3) の使用方法がデータに含まれていない限り、任意の 1 バイト/文字の文字エンコードを使用できます。

コピーブックのインポートに関する一般的な問題

コピーブックのインポートに関する最も一般的な問題は、入力行領域の Cobol 標準に従っていないことです。コピーブックのインポート解析では、各行の列 1 ~ 6 のコンテンツが無視され、列 7 に「*」 (アスタリスク) が含まれているすべての行が無視されます。また、各行の列 72 を超える部分はすべて無視されます。 つまり、実際のすべてのデータ定義が入力行の列 8 ~ 72 の間に存在する必要があります。

タブ位置に関する定義された標準はないため、入力内のタブは展開されません。コピーブックの入力列を数える場合、各タブ文字は 1 個のスペース文字として処理されます。

コピーブックを処理するときにインデントは無視され、レベル番号のみが有意として処理されます。これは通常は問題ではありませんが、Cobol コンパイラーで受け入れられないにも関わらずコピーブックのインポートが受け入れられる可能性があります。

コピーブックのインポートの結果として警告とエラーの両方が報告される場合があります。 一般に、警告は、有意であるかどうかに関係なく、機能がサポートまたは認識されないことを伝えます。エラーは、生成されたスキーマ (ある場合) がコピーブックの完全に正確な表現ではないことを意味する問題の通知です。報告されたすべての警告またはエラーを確認し、適切な処理を決定する必要があります。スキーマを生成されたとおりに単に受け入れたり、入力のコピーブックを変更したり、生成されたスキーマを変更したりすることができます。

リーダープロパティ (Cobol コピーブック)

DataWeave リーダーの ​application/flatfile​ 入力を定義する場合、「​リーダープロパティ (フラットファイル)​」で説明されているプロパティを設定できます。

種別 ​Binary​ または ​Packed​ のスキーマでは、改行を検出できないため、​recordParsing​ を ​lenient​ に設定すると、長いレコードのみを処理でき、短いレコードは処理できません。このスキーマは特定の 1 バイト文字エンコードでのみ機能します (つまり、UTF-8 などの複数バイト形式では機能しません)。

ライタープロパティ (Cobol コピーブック)

DataWeave スクリプトで ​output​ 形式として ​application/flatfile​ を指定する場合、「​ライタープロパティ (フラットファイル)​」で説明されているプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

例: 出力ディレクティブ
output application/flatfile schemaPath="src/main/resources/schemas/QBReqRsp.esl", structureIdent="QBResponse"

CSV

MIME タイプ: application/csv

CSV コンテンツは DataWeave 内でオブジェクトのリストとしてモデル化され、各レコードはオブジェクトになり、レコード内の各項目はプロパティになります。次に例を示します。

CSV を出力する DataWeave スクリプト:
%dw 2.0
output application/csv
---
[
  {
    "Name":"Mariano",
    "Last Name":"De achaval"
  },
  {
    "Name":"Leandro",
    "Last Name":"Shokida"
  }
]
CSV 出力:
Name,Last Name
Mariano,De achaval
Leandro,Shokida

リーダープロパティ (CSV)

CSV では、項目の分離、引用符の切り替え、または引用符のエスケープを行うインジケーターとして任意の特殊文字を割り当てることができます。入力内に存在する特殊文字を把握して、DataWeave でその特殊文字を正しく解釈できるようにします。

DataWeave リーダーの ​application/csv​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

bodyStartLineNumber

Number (数値)

0

本文が開始される行番号。

escape

Char (文字)

\

項目値内の区切り文字または引用符などの無効な文字をエスケープするために使用される文字。

ignoreEmptyLine

Boolean (ブール)

true

空の行を無視します。 有効なオプションは ​true​ または ​false​ です。

header

Boolean (ブール)

true

出力の 1 行目にヘッダー項目名が含まれるかどうかを示します。有効なオプションは ​true​ または ​false​ です。

headerLineNumber

Number (数値)

0

ヘッダーが配置されている行番号。

quote

Char (文字)

"

引用符で使用する文字。

separator

Char (文字)

,

項目間を分離する文字。

streaming

Boolean (ブール)

false

入力 CSV をストリーミングするために使用します。 有効なオプションは ​true​ または ​false​ です (エントリを順次アクセスする場合のみ使用します)。 ​ストリーミング例​と ​DataWeave リーダーおよびライター​ を参照してください。

  • header=true​ の場合、入力内の項目に任意の場所で名前 (​payload.userName​ など) を使用してアクセスできます。

  • header=false​ の場合、インデックスを使用して項目にアクセスする必要があります。インデックスは、最初にエントリを参照し、次に項目を参照します (​payload[107][2]​ など)。

ストリーミング例:

デフォルトでは、CSV リーダーは、ファイルが 1.5MB 以下の場合、ファイル全体からの入力データをメモリ内に保存します。ファイルが 1.5 MB よりも大きい場合、データはディスクに書き込まれます。非常に大きなファイルの場合は、​streaming​ プロパティを ​true​ に設定することで、リーダーのパフォーマンスを向上できます。このプロパティの使用方法を示すため、次の例では、CSV ファイルをストリーミングして JSON に変換します。

<flow name="dw-streamingFlow" >
  <scheduler doc:name="Scheduler" >
    <scheduling-strategy >
      <fixed-frequency frequency="1" timeUnit="MINUTES"/>
    </scheduling-strategy>
  </scheduler>
  <file:read
     path="${app.home}/input.csv"
     config-ref="File_Config"
     outputMimeType="application/csv; streaming=true; header=true"/>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map ((row) -> {
zipcode: row.zip
})]]></ee:set-payload>
    </ee:message>
  </ee:transform>
  <file:write doc:name="Write"
    config-ref="File_Config1"
    path="/path/to/output/file/output.json"/>
  <logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
  • この例では、​outputMimeType="application/csv; streaming=true"​ を設定して、CSV 入力をストリーミングするように HTTP リスナーを設定します。 Studio UI では、リスナーの ​[MIME Type (MIME タイプ)]​ を ​application/csv​ に設定し、MIME タイプの ​[Parameters (パラメーター)]​ を ​[Key (キー)]​ ​streaming​ と ​[Value (値)]​ ​true​ に設定できます。 この例では、説明のために ​header=true​ も設定していますが、この設定はデフォルトです。

  • DataWeave スクリプトは ​Transform Message​ コンポーネントで ​map​ 関数を使用して、CSV ペイロードの各行を反復処理し、​zip​ 列の各項目の値を選択します。

  • Write 操作によって、変換の結果が含まれるファイル (​output.json​) が返されます。

  • Logger は、​output.json​ に表示されるものと同じ出力ペイロードを出力します。

この例は、入力ファイルが Studio プロジェクトディレクトリ ​src/main/resources​ (​${app.home}​ の場所) に配置されていることを示しています。

CSV 入力の構造は次のようになります。

ストリーミング例の CSV ファイル入力 (切り捨てられています):
street,city,zip,state,beds,baths,sale_date
3526 HIGH ST,SACRAMENTO,95838,CA,2,1,Wed May 21 00:00:00 EDT 2018
51 OMAHA CT,SACRAMENTO,95823,CA,3,1,Wed May 21 00:00:00 EDT 2018
2796 BRANCH ST,SACRAMENTO,95815,CA,2,1,Wed May 21 00:00:00 EDT 2018
2805 JANETTE WAY,SACRAMENTO,95815,CA,2,1,Wed May 21 00:00:00 EDT 2018
6001 MCMAHON DR,SACRAMENTO,95824,CA,2,1,,Wed May 21 00:00:00 EDT 2018
5828 PEPPERMILL CT,SACRAMENTO,95841,CA,3,1,Wed May 21 00:00:00 EDT 2018

通常、ストリーミングされるファイルはこれよりもはるかに長くなります。

ストリーミング例の出力:
[
  {
    "zipcode": "95838"
  },
  {
    "zipcode": "95823"
  },
  {
    "zipcode": "95815"
  },
  {
    "zipcode": "95815"
  },
  {
    "zipcode": "95824"
  },
  {
    "zipcode": "95841"
  }
]

ライタープロパティ (CSV)

DataWeave スクリプトで ​output​ 形式として ​application/csv​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bodyStartLineNumber

Number (数値)

0

本文が開始される行番号。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

encoding

String (文字列)

なし

このライターで使用されるエンコード (​UTF-8​ など)。

escape

Char (文字)

\

項目値内の区切り文字または引用符などの無効な文字をエスケープするために使用される文字。

lineSeparator

String (文字列)

CSV を作成するときに使用する行区切り文字 (「\r\n」など)

header

Boolean (ブール)

true

出力の 1 行目にヘッダー項目名が含まれるかどうかを示します。有効なオプションは ​true​ または ​false​ です。

headerLineNumber

Number (数値)

0

ヘッダーが配置されている行番号。

ignoreEmptyLine

Boolean (ブール)

true

空の行を無視します。 有効なオプションは ​true​ または ​false​ です。

quote

Char (文字)

"

引用符で使用する文字。

quoteHeader

Boolean (ブール)

false

ヘッダー値を引用符で囲むかどうかを示します。 有効なオプションは ​true​ または ​false​ です。

quoteValues

Boolean (ブール)

false

(特殊文字が含まれている場合でも) 各値を引用符で囲む必要があるかどうかを示します。

separator

String (文字列)

,

項目間を分離する文字。

このすべてのパラメーターは省略可能です。

CSV 出力ディレクティブの例は次のようになります。

例: 出力ディレクティブ
output application/csv separator=";", header=false, quoteValues=true

メタデータ型の定義 (CSV)

Transform コンポーネントでは、次の方法を使用して CSV 種別を定義できます。

  • サンプルファイルを提供する。

  • 各項目を手動でセットアップできるグラフィカルエディターを使用する。

    dataweave formats 4a556

DataWeave (weave)

MIME タイプ: application/dw

この形式はデバッグのみを目的としてます。この形式を本番環境で使用すると、パフォーマンスに影響する可能性があります。

DataWeave (weave) 形式はすべての変換の正規形式です。 この形式を使用すると、入力データが新しい形式に変換される前に入力データがどのように解釈されるかを容易に理解できます。

この形式の目的は、DataWeave 変換の結果を容易にデバッグできるようにすることのみです。 動作は他の形式よりも大幅に遅くなります。パフォーマンスに影響する可能性があるため、これを本番アプリケーションで使用することはお勧めしません。

この例は、XML 入力が DataWeave 形式でどのように表現されるかを示しています。

入力 XML
<employees>
  <employee>
    <firstname>Mariano</firstname>
    <lastname>DeAchaval</lastname>
  </employee>
  <employee>
    <firstname>Leandro</firstname>
    <lastname>Shokida</lastname>
  </employee>
</employees>
DataWeave 形式の出力
{
  employees: {
    employee: {
      firstname: "Mariano",
      lastname: "DeAchaval"
    },
    employee: {
      firstname: "Leandro",
      lastname: "Shokida"
    }
  }
} as Object {encoding: "UTF-8", mimeType: "text/xml"}

ライタープロパティ (weave)

DataWeave スクリプトで ​output​ 形式として ​application/dw​ を指定する場合、次のプロパティを追加して、パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

ignoreSchema

Boolean (ブール)

false

ライターでスキーマを無視するかどうかを示します。有効なオプションは ​true​ または ​false​ です。

indent

String (文字列)

インデントとして使用される文字列。

maxCollectionSize

Number (数値)

-1

配列またはオブジェクトで許容される最大要素数。 -1​ は、制限が設定されないことを意味します。

Excel

MIME タイプ: application/xlsx

.xlsx​ ファイルのみがサポートされます (Excel 2007)。 .xls​ ファイルは Mule ではサポートされません。

Excel ワークブックは一連のシートです。DataWeave では、これはオブジェクトにマップされ、各シートがキーになります。Excel シートごとに 1 つのテーブルのみが許可されます。 テーブルは行の配列として表現されます。行はオブジェクトであり、そのキーが列、値がセルのコンテンツになります。

dataweave formats exceltable
Figure 2. 入力:
XLSX を出力する DataWeave スクリプト:
output application/xlsx header=true
---
{
  Sheet1: [
    {
      Id: 123,
      Name: George
    },
    {
      Id: 456,
      Name: Lucas
    }
  ]
}

他の例については、​「Excel (XLSX) ファイルのデータの参照」​を参照してください。

リーダープロパティ (Excel)

DataWeave リーダーの ​application/xlsx​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

header

Boolean (ブール)

true

Excel テーブルにヘッダーを含めるかどうかを示します。有効なオプションは ​true​ または ​false​ です。

ignoreEmptyLine

Boolean (ブール)

true

空の行を無視するかどうかを示します。有効なオプションは ​true​ または ​false​ です。

streaming

Boolean (ブール)

false

Mule 4.2.2 で導入済み: ストリーミングの目的は、大きなファイルを処理することです。ストリーミングを有効にすると、リーダーは一度にすべてのデータを使用可能にするのではなく、各行に順次アクセスして一度に 1 行ずつメモリ内に保存します。ストリーミングでは、ファイルの行にランダムアクセスできません。

tableOffset

String (文字列)

なし

テーブルの最初のセルの位置 (​<Column><Row> example A1​)。

zipBombCheck

Boolean (ブール)

true

false​ に設定すると、zip 爆弾チェックがオフになります。有効なオプションは ​true​ または ​false​ です。

ストリーミング例:

ストリーミング例:デフォルトでは、Excel リーダーは、ファイルが 1.5MB 以下の場合、ファイル全体から入力データをメモリ内に保存します。ファイルが 1.5 MB よりも大きい場合、データはディスクに書き込まれます。非常に大きなファイルの場合は、​streaming​ プロパティを ​true​ に設定することで、リーダーのパフォーマンスを向上できます。このプロパティの使用方法を示すため、次の例では、XLSX ファイルをストリーミングして JSON に変換します。

次の例では、Excel ファイルをストリーミングして JSON に変換します。

<http:listener-config
    name="HTTP_Listener_config"
    doc:name="HTTP Listener config" >
  <http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<flow name="streaming_flow" >
  <http:listener
    doc:name="Listener"
    config-ref="HTTP_Listener_config"
    path="/"
    outputMimeType="application/xlsx; streaming=true"/>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload."Sheet Name" map ((row) -> {
    foo: row.a,
    bar: row.b
})]]></ee:set-payload>
    </ee:message>
  </ee:transform>
</flow>

この例の説明:

  • outputMimeType="application/xlsx; streaming=true"​ を設定して、XLSX 入力をストリーミングするように HTTP リスナーを設定します。 Studio UI では、リスナーの ​[MIME Type (MIME タイプ)]​ を ​application/xlsx​ に設定し、MIME タイプの ​[Parameters (パラメーター)]​ を ​[Key (キー)]​ ​streaming​ と ​[Value (値)]​ ​true​ に設定できます。

  • Transform Message​ コンポーネントの DataWeave スクリプトを使用して、XLSX ペイロード (​"Sheet Name"​ という名前の XLSX シート) の各行を反復処理し、(​row.a​、​row.b​ を使用して) 行の各セルの値を選択します。​a​ および ​b​ という名前の列を想定し、それらの列の各行の値を ​foo​ および ​bar​ にそれぞれマップします。

ライタープロパティ (Excel)

DataWeave スクリプトで ​output​ 形式として ​application/xlsx​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

header

Boolean (ブール)

true

Excel テーブルにヘッダーを含めるかどうかを示します。有効なオプションは ​true​ または ​false​ です。ヘッダーがない場合、列名が使用されます (例: A、B、C…​)。

ignoreEmptyLine

Boolean (ブール)

true

空の行を無視するかどうかを示します。有効なオプションは ​true​ または ​false​ です。

tableOffset

String (文字列)

なし

テーブルの最初のセルの位置 (​<Column><Row> example A1​)。

zipBombCheck

Boolean (ブール)

true

false​ に設定すると、zip 爆弾チェックがオフになります。有効なオプションは ​true​ または ​false​ です。

このすべてのパラメーターは省略可能です。Excel の DataWeave 出力ディレクティブは次のようになります。

例: 出力ディレクティブ
output application/xlsx header=true

メタデータ型の定義 (Excel)

Transform コンポーネントでは、次の方法を使用して Excel 種別を定義できます。

  • 各項目を手動でセットアップできるグラフィカルエディターを使用する。

dataweave formats excel metadata

固定幅

MIME タイプ: application/flatfile

固定幅の種別は技術的にはフラットファイル形式の種別とみなされますが、このオプションを選択すると、Transform コンポーネントでは、この形式のニーズに合わせて適切に調整された設定が提供されます。

DataWeave の固定幅は最大 15 MB のファイルをサポートし、メモリ要件は約 40 対 1 です。たとえば、1 MB のファイルは処理に最大 40 MB のメモリを必要とするため、大きい固定幅ファイルに対する TPS のニーズと組み合わせてこのメモリ要件を考慮することが重要です。これは正確な数値ではありません。この値は、マッピング命令の複雑さによって異なる可能性があります。

リーダープロパティ (固定幅)

DataWeave リーダーの ​application/flatfile​ 入力を定義する場合、「​リーダープロパティ (フラットファイル)​」で説明されているプロパティを設定できます。

種別 ​Binary​ または ​Packed​ のスキーマでは、改行を検出できないため、​recordParsing​ を ​lenient​ に設定すると、長いレコードのみを処理でき、短いレコードは処理できません。このスキーマは特定の 1 バイト文字エンコードでのみ機能します (つまり、UTF-8 などの複数バイト形式では機能しません)。

ライタープロパティ (固定幅)

DataWeave スクリプトで ​output​ 形式として ​application/flatfile​ を指定する場合、「​ライタープロパティ (フラットファイル)​」で説明されているプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

すべてのプロパティは省略可能です。

DataWeave 出力ディレクティブは次のようになります。

例: 出力ディレクティブ
output application/flatfile schemaPath="src/main/resources/schemas/payment.ffd", encoding="UTF-8"

メタデータ型の定義 (固定幅)

Transform コンポーネントでは、次の方法を使用して固定幅種別を定義できます。

  • サンプルファイルを提供する。

  • フラットファイルスキーマファイルを参照する。

  • 各項目を手動でセットアップできるグラフィカルエディターを使用する。

    dataweave formats 27b3c

フラットファイル

MIME タイプ: application/flatfile

フラットファイルは、1 つのメッセージ内で複数のタイプの固定幅レコードをサポートします。スキーマ構造を使用すると、異なるレコードタイプを区別する方法と、レコードを論理的にグループ化する方法を定義できます。

DataWeave のフラットファイルは最大 15 MB のファイルをサポートし、メモリ要件は約 40 対 1 です。たとえば、1 MB のファイルは処理に最大 40 MB のメモリを必要とするため、大きいフラットファイルに対する TPS のニーズと組み合わせてこのメモリ要件を考慮することが重要です。これは正確な数値ではありません。この値は、マッピング命令の複雑さによって異なる可能性があります。

リーダープロパティ (フラットファイル)

DataWeave リーダーの ​application/flatfile​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

enforceRequires

Boolean (ブール)

false

必須値がない場合にエラーになります。 有効なオプションは ​true​ または ​false​ です。

missingValues

String (文字列)

コピーブックスキーマの場合は ​nulls​、それ以外の場合は ​spaces

欠落値を表すために使用される文字を入力します。入力データの欠落値を表すために、以下を使用できます。

  • none​: すべてのデータを実際の値として処理する

  • spaces​: スペースのみで構成される項目を欠落値として解釈する

  • zeroes​: 「0」文字のみで構成される数値項目とスペースのみで構成される文字項目を欠落値として解釈する

  • nulls​: 0 バイトのみで構成される項目を欠落値として解釈する

recordParsing

String (文字列)

strict

予想される、行/レコード間の分離:

  • strict​: 各レコードの末尾で改行が予想される

  • lenient​: 改行が使用されるが、レコードがスキーマ仕様よりも短いまたは長い場合がある

  • noTerminator​: レコードが分離されずに互いに続く

  • singleRecord​: 入力全体が 1 つのレコード

schemaPath

String (文字列)

なし

スキーマ定義。入力の解析で使用するスキーマファイルのローカルディスク内の場所。

segmentIdent

String (文字列)

なし

固定幅のスキーマまたはコピーブックスキーマのセグメント識別子 (1 つのセグメント/レコード定義を解析する場合と、スキーマに複数のセグメント定義が含まれている場合にのみ必要)。

structureIdent

String (文字列)

なし

フラットファイルスキーマのセグメント識別子 (構造定義を解析する場合と、スキーマに複数の構造定義が含まれている場合にのみ必要)。

truncateDependingOn

Boolean (ブール)

false

COBOL コピーブックの DEPENDING ON 値を、使用される長さに切り捨てます。 有効なオプションは ​true​ または ​false​ です。

zonedDecimalStrict

Boolean (ブール)

false

COBOL コピーブックのゾーン 10 進数値に署名エンコードの ​strict​ ASCII 形式を使用します。 有効なオプションは ​true​ または ​false​ です。

種別 ​Binary​ または ​Packed​ のスキーマでは、改行を検出できないため、​recordParsing​ を ​lenient​ に設定すると、長いレコードのみを処理でき、短いレコードは処理できません。現在、このスキーマも特定の 1 バイト文字エンコードでのみ機能します (つまり、UTF-8 などの複数バイト形式では機能しません)。

ライタープロパティ (フラットファイル)

DataWeave スクリプトで ​output​ 形式として ​application/flatfile​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

encoding

String (文字列)

なし

このライターで使用されるエンコード (​UTF-8​ など)。

enforceRequires

Boolean (ブール)

false

必須値がない場合にエラーになります。 有効なオプションは ​true​ または ​false​ です。

missingValues

String (文字列)

コピーブックスキーマの場合は ​NULLS​、それ以外の場合は ​SPACES

欠落値を表すために使用される文字を入力します。

  • NONE​: 欠落値の場合に何も書き込まない

  • SPACES​: 項目をスペースで埋める

  • ZEROES​: 数値項目を「0」文字で、文字項目をスペース文字で埋める

  • NULLS​: 項目を 0 バイトで埋める

recordTerminator

String (文字列)

システムプロパティ ​line.separator

レコード区切り文字 (改行)。有効なオプション:

  • lf

  • cr

  • crlf

  • なし

Mule バージョン 4.0.4 以前では、これは、複数のレコードがある場合の区切り文字としてのみ使用されます。値は文字コードに直接変換されます (​none​ では各レコードの終端はありません)。

schemaPath

String (文字列)

なし

スキーマ定義。使用するスキーマファイルが配置されているパス。

segmentIdent

String (文字列)

なし

固定幅のスキーマまたはコピーブックスキーマのセグメント識別子 (1 つのセグメント/レコード定義を作成する場合と、スキーマに複数のセグメント定義が含まれている場合にのみ必要)。

structureIdent

String (文字列)

なし

フラットファイルスキーマのセグメント識別子 (構造定義を作成する場合と、スキーマに複数の構造定義が含まれている場合にのみ必要)。

trimValues

Boolean (ブール)

false

末尾の文字を切り捨てることで、項目の長さを超える文字列値を切り取ります。有効なオプションは ​true​ または ​false​ です。

truncateDependingOn

Boolean (ブール)

false

DEPENDING ON COBOL コピーブック値を、使用される長さに切り捨てます。有効なオプションは ​true​ または ​false​ です。

zonedDecimalStrict

Boolean (ブール)

false

COBOL コピーブックのゾーン 10 進数値に署名エンコードの ​strict​ ASCII 形式を使用します。有効なオプションは ​true​ または ​false​ です。

フラットファイルを出力する DataWeave スクリプト:
%dw 2.0
output application/flatfile schemaPath="src/main/resources/test-data/QBReqRsp.esl", structureIdent="QBResponse"
---
payload

メタデータ型の定義 (フラットファイル)

Transform コンポーネントでは、スキーマファイルを参照することで、フラットファイル種別を定義できます。

マルチパート (フォームデータ)

MIME タイプ: multipart/form-data

DataWeave ではマルチパートサブタイプ (特に ​form-data​) がサポートされます。この形式では、各パートの形式に関係なく、1 つのペイロード内で複数の異なるデータパートを処理できます。パートの開始と終了を区別するには、境界を使用します。各パートのメタデータはヘッダーを介して追加できます。

3 つのパートで構成される ​34b21​ 境界を含む未加工の ​multipart/form-data​ ペイロードを以下に示します。

  • text​ という名前の ​text/plain

  • file1​ という名前の ​application/json​ ファイル (​a.json​)

  • file2​ という名前の ​text/html​ ファイル (​a.html​)

未加工のマルチパート
--34b21
Content-Disposition: form-data; name="text"
Content-Type: text/plain

Book
--34b21
Content-Disposition: form-data; name="file1"; filename="a.json"
Content-Type: application/json

{
  "title": "Java 8 in Action",
  "author": "Mario Fusco",
  "year": 2014
}
--34b21
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html

<!DOCTYPE html>
<title>
  Available for download!
</title>
--34b21--

DataWeave スクリプト内で、​parts​ 要素を選択し、任意のパートのデータにアクセスし、変換できます。操作は配列に基づくことができます。また、パートを参照するための名前がパートに設定されている場合は、キーに基づくことができます。パートのデータには ​content​ キーワードを介してアクセスでき、ヘッダーには ​headers​ キーワードを介してアクセスできます。

たとえば、次のスクリプトでは、上記のペイロードを考慮して ​Book:a.json​ が生成されます。

マルチパートコンテンツの読み取り:
%dw 2.0
output text/plain
---
payload.parts.text.content ++ ':' ++ payload.parts[1].headers.'Content-Disposition'.filename

DataWeave がパートのリスト (各パートにヘッダーとコンテンツが含まれる) を含むオブジェクトをビルドするマルチパートコンテンツを生成できます。次の DataWeave スクリプトでは、ペイロード内で HTML データを使用できる場合に、(以前に分析した) 未加工のマルチパートデータを生成します。

マルチパートコンテンツの書き込み:
%dw 2.0
output multipart/form-data
boundary='34b21'
---
{
  parts : {
    text : {
      headers : {
        "Content-Type": "text/plain"
      },
      content : "Book"
    },
    file1 : {
      headers : {
        "Content-Disposition" : {
            "name": "file1",
            "filename": "a.json"
        },
        "Content-Type" : "application/json"
      },
      content : {
        title: "Java 8 in Action",
        author: "Mario Fusco",
        year: 2014
      }
    },
    file2 : {
      headers : {
        "Content-Disposition" : {
            "filename": "a.html"
        },
        "Content-Type" : payload.^mimeType
      },
      content : payload
    }
  }
}

パートの名前が ​Content-Disposition​ ヘッダーに明示的に提供されていない場合は、キーによりパートの名前が決まります。また、DataWeave は、サポートされる形式からのコンテンツを処理できるだけでなく、HTML など、サポートされない形式への参照からコンテンツを処理できます。

リーダープロパティ (マルチパート)

DataWeave リーダーの ​multipart/form-data​ 入力を定義する場合、次のプロパティを設定できます。

データの分析時にリーダーで使用する境界を設定できます。

パラメーター Default (デフォルト) 説明

boundary

String (文字列)

なし

マルチパートの境界値。パートを区切る文字列。

DataWeave の ​read​ 関数では、省略可能なパラメーターとしてプロパティを渡すこともできます。プロパティのスコープは、関数をコールする DataWeave スクリプトに制限されます。

ライタープロパティ (マルチパート)

DataWeave スクリプトで ​output​ 形式として ​multipart/form-data​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

例: 出力ディレクティブ
output multipart/form-data

出力ディレクティブでは、指定された形式でライターがデータを出力するときに使用するプロパティを設定することもできます。

パラメーター Default (デフォルト) 説明

boundary

String (文字列)

なし

マルチパートの境界値。パートを区切る文字列。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

たとえば、境界が ​34b21​ の場合、以下を渡すことができます。

例: 出力ディレクティブ
output multipart/form-data boundary=34b21

DataWeave の ​write​ 関数では、省略可能なパラメーターとしてプロパティを渡すこともできます。プロパティのスコープは、関数をコールする DataWeave スクリプトに制限されます。

通常 (ただし、これに限定されない)、マルチパートは、コンテンツの読み取りと書き込みの両方で、​Content-Type​ ヘッダーを介して境界が共有されている HTTP で使用されます。

Java

MIME タイプ: application/java

Java オブジェクトと DataWeave 型との間のマッピングを次の表に示します。

Java 型 DataWeave 型

Collections/Array/Iterator/Iterable

Array

String/CharSequence/Char/Enum/Class

String

int/Short/Long/BigInteger/Flat/Double/BigDecimal

Number

Calendar/XmlGregorianCalendar

DateTime

TimeZone

TimeZone

sql.Date/util.Date

Date

Bean/Map

Object

InputStream/Array[Byte]

Binary

java.lang.Boolean

Boolean

ライタープロパティ (Java)

DataWeave スクリプトで output 形式として ​application/java​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

duplicateKeyAsArray

Boolean (ブール)

False

オブジェクトで重複キーが検出されると、ライターはその値をそれらのすべての値が含まれる配列に変更します。 有効なオプションは ​true​ または ​false​ です。

writeAttributes

Boolean (ブール)

false

キーに属性がある場合、それらを含むキーの子キー - 値ペアとして配置されます。属性キー名の先頭は @ になります。有効なオプションは ​true​ または ​false​ です。

カスタム型 (Java)

いくつかのカスタム Java 型があります。

  • class

  • Enum

メタデータプロパティ ​class​ (Java)

Java 開発者は、入力としてどのクラスを作成し、送信する必要があるかについてのヒントとして ​class​ メタデータキーを使用します。これが明示的に定義されていない場合、DataWeave コンテキストから推定を試みるか、これにデフォルト値を割り当てます。

  • オブジェクトの場合は ​java.util.HashMap

  • リストの場合は ​java.util.ArrayList

%dw 2.0
type user = Object { class: "com.anypoint.df.pojo.User"}
output application/json
---
{
  name : "Mariano",
  age : 31
} as user

上のコードでは、必須入力の種別を ​com.anypoint.df.pojo.User​ のインスタンスとして定義します。

Enum カスタム型 (Java)

java.util.Map​ に列挙値を配置するには、DataWeave Java Module では、​Enum​ と呼ばれるカスタム型を定義します。これを使用すると、提供された文字列を、指定された列挙型の名前として処理する必要があることを指定できます。これは、列挙の Java クラス名を持つクラスプロパティと共に常に使用する必要があります。

メタデータ型の定義 (Java)

Transform コンポーネントでは、次の方法を使用して Java 種別を定義できます。

  • サンプルオブジェクトを提供する

JSON

MIME タイプ: application/json

ライタープロパティ (JSON)

DataWeave スクリプトで ​output​ 形式として ​application/json​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。

duplicateKeyAsArray

Boolean (ブール)

false

オブジェクトで重複キーが検出されると、ライターはその値をそれらのすべての値が含まれる配列に変更します。 有効なオプションは ​true​ または ​false​ です。JSON 言語では、1 つの同じ親を持つ重複キーは許可されないため、通常重複により例外が発生します。

encoding

String (文字列)

UTF-8

出力で使用する文字セット。

indent

Boolean (ブール)

true

JSON コードをインデントして読みやすくするか、JSON を 1 行に圧縮するかを示します。 有効なオプションは ​true​ または ​false​ です。

skipNullOn

String (文字列)

なし

指定されたデータ構造の null 値をスキップします。デフォルトでは、スキップしません。有効なオプションは ​arrays​、​objects​、​everywhere​ です。「​Null をスキップ (JSON)​」を参照してください。

例: 出力ディレクティブ
output application/json indent=false, skipNullOn="arrays"

リーダープロパティ (JSON)

DataWeave リーダーの ​application/json​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

streaming

Boolean (ブール)

false

入力をストリーミングするために使用します。エントリを順次アクセスする場合のみ使用します。有効なオプションは ​true​ または ​false​ です。 入力は最上位の配列である必要があります。DataWeave のストリーミングについての詳細は、​DataWeave リーダーおよびライター​ を参照してください。

ストリーミングを示すため、次の例では、配列内の各要素を一度に 1 つずつ読み取って、JSON ファイルをストリーミングします。

ストリーミング例:
<file:config name="File_Config" doc:name="File Config" />
<flow name="dw-streaming-jsonFlow" >
  <scheduler doc:name="Scheduler" >
    <scheduling-strategy >
      <fixed-frequency frequency="1" timeUnit="MINUTES"/>
    </scheduling-strategy>
  </scheduler>
  <file:read doc:name="Read"
     config-ref="File_Config"
     path="${app.home}/myjsonarray.json"
     outputMimeType="application/json; streaming=true"/>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload.myJsonExample map ((element) -> {
returnedElement : element.zipcode
})]]></ee:set-payload>
    </ee:message>
  </ee:transform>
  <file:write doc:name="Write"
    path="/path/to/output/file/output.json"
    config-ref="File_Config1"/>
  <logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
  • このストリーミング例では、​outputMimeType="application/json; streaming=true"​ を設定して、JSON 入力をストリーミングするように HTTP リスナーを設定します。 Studio UI では、リスナーの ​[MIME Type (MIME タイプ)]​ を ​application/json​ に設定し、MIME タイプの ​[Parameters (パラメーター)]​ を ​[Key (キー)]​ ​streaming​ と ​[Value (値)]​ ​true​ に設定できます。

  • Transform Message​ コンポーネントの DataWeave スクリプトは、入力ペイロードの配列を反復処理し、その ​zipcode​ 値を選択します。

  • Write 操作によって、変換の結果が含まれるファイル (​output.json​) が返されます。

  • Logger は、​output.json​ に表示されるものと同じ出力ペイロードを出力します。

JSON 入力ペイロードは次のようになります。

ストリーミング例の JSON 入力 (切り捨てられています):
{ "myJsonExample" : [
    {
      "name" : "Shoki",
      "zipcode": "95838"
    },
    {
      "name" : "Leandro",
      "zipcode": "95823"
    },
    {
      "name" : "Mariano",
      "zipcode": "95815"
    },
    {
      "name" : "Cristian",
      "zipcode": "95815"
    },
    {
      "name" : "Kevin",
      "zipcode": "95824"
    },
    {
      "name" : "Stanley",
      "zipcode": "95841"
    }
  ]
}
JSON のストリーミング例の出力:
[
  {
    "returnedElement": "95838"
  },
  {
    "returnedElement": "95823"
  },
  {
    "returnedElement": "95815"
  },
  {
    "returnedElement": "95815"
  },
  {
    "returnedElement": "95824"
  },
  {
    "returnedElement": "95841"
  }
]

Null をスキップ (JSON)

skipNullOn​ ライタープロパティを使用して、配列、オブジェクト、またはその両方から null 値を除外できます。

各設定値について説明します。

  • arrays

    JSON 出力の ​null​ 値を無視して除外します。たとえば、​output application/json skipNullOn="arrays"​ のようにします。

  • objects

    null を含むオブジェクトを無視します。出力には、null を含むオブジェクトの代わりに空のオブジェクト (​{}​) が含まれます。たとえば、​output application/json skipNullOn="objects"​ のようにします。

  • everywhere

    skipNullOn​ を配列とオブジェクトに適用します。たとえば、​output application/json skipNullOn="everywhere"​ のようにします。

メタデータ型の定義 (JSON)

Transform コンポーネントでは、次の方法を使用して JSON 種別を定義できます。

  • サンプルファイルを提供する。

  • スキーマファイルを参照する。

改行区切りの JSON

MIME タイプ: application/x-ndjson

ライタープロパティ (ndjson)

DataWeave スクリプトで ​output​ 形式として ​application/x-ndjson​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

writeAttributes

Boolean (ブール)

false

有効なオプションは ​true​ または ​false​ です。

encoding

String (文字列)

bufferSize

Number (数値)

8192

バッファライターのサイズ。

skipNullOn

String (文字列)

有効なオプションは ​arrays​ または ​objects​ です。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

リーダープロパティ (ndjson)

DataWeave リーダーの ​application/x-ndjson​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

skipInvalid

Boolean (ブール)

false

有効なオプションは true または false です。

ignoreEmptyLine

Boolean (ブール)

true

有効なオプションは ​true​ または ​false​ です。

オクテットストリーム

MIME タイプ: application/octet-stream

ライタープロパティ (octet-stream)

DataWeave スクリプトで ​output​ 形式として ​application/octet-stream​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

テキスト/プレーン

MIME タイプ: text/plain

ライタープロパティ (text/plain)

DataWeave スクリプトで ​output​ 形式として ​text/plain​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

encoding

String (文字列)

なし

使用するライターのエンコード。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

テキスト Java プロパティ

MIME タイプ: text/x-java-properties

ライタープロパティ (properties)

DataWeave ​output​ ディレクティブで ​text/x-java-properties​ 出力を定義する場合、省略可能なプロパティを追加して、パーサーの動作を変更できます。

パラメーター Default (デフォルト) 説明

encoding

String (文字列)

なし

使用するライターのエンコード。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

XML

MIME タイプ: application/xml

XML データ構造は、キーの値として他のオブジェクトが含まれている可能性がある DataWeave オブジェクトにマップされます。反復するキーがサポートされます。

入力
<users>
  <company>MuleSoft</company>
  <user name="Leandro" lastName="Shokida"/>
  <user name="Mariano" lastName="Achaval"/>
</users>
DataWeave スクリプト:
{
  users: {
    company: "MuleSoft",
    user @(name: "Leandro",lastName: "Shokida"): "",
    user @(name: "Mariano",lastName: "Achaval"): ""
  }
}

リーダープロパティ (XML)

DataWeave リーダーの ​application/xml​ 入力を定義する場合、次のプロパティを設定できます。

パラメーター Default (デフォルト) 説明

maxEntityCount

Number (数値)

1

エンティティ拡張の最大数。 この制限は、Billion Laughs 攻撃を回避するために設定されます。

indexedReader

Boolean (ブール)

true

しきい値に達したときにインデックス付けされた XML リーダーを使用する必要があるかどうか。有効なオプションは ​true​ または ​false​ です。 XML 属性で使用できます。Mule 4.2.1 以降で使用できます。

nullValueOn

String (文字列)

blank

空または空白のテキストを含むタグを null として読み取るかどうか。有効なオプションは ​empty​、​none​、​blank​ です。

externalEntities

Boolean (ブール)

false

外部エンティティを処理する必要があるかどうかを示します。デフォルトでは、これは XXE 攻撃を回避するために無効になっています。 有効なオプションは ​true​ または ​false​ です。

supportDtd

Boolean

false

DTD サポートを有効または無効にします。無効にすると、内部および外部のサブセットがスキップされ、処理されません。有効なオプションは、​true​ または ​false​ です。Mule システムプロパティ ​com.mulesoft.dw.xml.supportDTD​ を設定してこのプロパティを有効にすることもできます。このプロパティのデフォルトは、Mule バージョン 4.2.2-20210419 で ​true​ から ​false​ に変更されました。

ライタープロパティ (XML)

DataWeave スクリプトで ​output​ 形式として ​application/xml​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

bufferSize

Number (数値)

8192

バッファライターのサイズ。

encoding

String (文字列)

なし

使用するライターのエンコード。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。 有効なオプションは ​true​ または ​false​ です。Mule 4.2.1 以降で使用できます。

indent

Boolean (ブール)

true

出力をインデントするかどうかを示します。 有効なオプションは ​true​ または ​false​ です。

inlineCloseOn

String (文字列)

empty

どのような場合にライターでインラインの終了タグを使用するか。有効なオプションは ​empty​ または ​none​ です。

onInvalidChar

String (文字列)

なし

有効なオプションは ​base64​、​ignore​、​none​ です。

writeNilOnNull

Boolean (ブール)

false

値が null の場合に nil 属性を書き込むかどうか。有効なオプションは ​true​ または ​false​ です。

skipNullOn

String (文字列)

なし

指定されたデータ構造の null 値をスキップします。デフォルトでは、スキップしません。有効なオプションは ​elements​、​attributes​、​everywhere​ です。「​Null をスキップ (XML)​」を参照してください。

writeDeclaration

Boolean (ブール)

true

XML ヘッダーの宣言を書き込むかどうかを示します。有効なオプションは ​true​ または ​false​ です。

例: 出力ディレクティブ
output application/xml indent=false, skipNullOn="attributes"

inlineCloseOn​ パラメーターでは、出力を次のような (デフォルト) 構造にするかどうかを定義します。

<someXml>
  <parentElement>
    <emptyElement1></emptyElement1>
    <emptyElement2></emptyElement2>
    <emptyElement3></emptyElement3>
  </parentElement>
</someXml>

次のような構造にすることもできます (​empty​ の値を設定)。

<payload>
  <someXml>
    <parentElement>
      <emptyElement1/>
      <emptyElement2/>
      <emptyElement3/>
    </parentElement>
  </someXml>
</payload>

「自己終了 XML タグの出力」の例​も参照してください。

Null をスキップ (XML)

「null」値の項目を含むアウトバウンドメッセージを変換で生成するかどうか、またはこのような項目を完全に無視するかどうかを指定できます。 これは、​skipNullOn​ という名前の出力ディレクティブ内の属性を介して設定でき、3 つの異なる値 (​elements​、​attributes​、または ​everywhere​) に設定できます。

各設定値について説明します。

  • elements​: キーと null 値のペアは無視されます。

  • attributes​: null 値を含む XML 属性はスキップされます。

  • everywhere​: このルールが要素と属性の両方に適用されます。

メタデータ型の定義 (XML)

Transform コンポーネントでは、次の方法を使用して XML 種別を定義できます。

  • サンプルファイルを提供する。

  • スキーマファイルを参照する。

CData カスタム型 (XML)

MIME タイプ: application/xml

CData​ は、CDATA XML ブロックを識別するために使用する XML のカスタムデータ型です。CDATA 内でコンテンツをラップするか、CDATA ブロック内に入力文字列が到達したかどうかを確認するようにライターに指示することができます。 CData​ は型 ​String​ から継承されます。

DataWeave スクリプト:::
%dw 2.0
output application/xml
---
{
  users:
  {
    user : "Mariano" as CData,
    age : 31 as CData
  }
}
出力:
<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user><![CDATA[Mariano]]></user>
  <age><![CDATA[31]]></age>
</users>

URL エンコード

MIME タイプ: application/x-www-form-urlencoded

エンコードされた URL 文字列は DataWeave オブジェクトにマップされます。

  • ドットまたはスターセレクターを使用して、値をキーで読み取ることができます。

  • DataWeave オブジェクトを指定して、ペイロードを書き込むことができます。

x-www-form-urlencoded​ データの例を次に示します。

データ
key=value&key+1=%40here&key=other+value&key+2%25

次の DataWeave スクリプトでは、上のデータが生成されます。

DataWeave オブジェクト
output application/x-www-form-urlencoded
---
{
  "key" : "value",
  "key 1": "@here",
  "key" : "other value",
  "key 2%": null
}

上の​データ​を次の例の DataWeave スクリプトへの入力として読み取って、結果として ​value@here​ を返すことができます。

DataWeave スクリプト:
output text/plain
---
payload.*key[0] ++ payload.'key 1'

エンコードされた URL データのリーダープロパティはありません。

ライター (エンコードされた URL データ)

DataWeave スクリプトで output 形式として ​application/x-www-form-urlencoded​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

encoding

String (文字列)

なし

使用するライターのエンコード。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

例: 出力ディレクティブ
  • output application/x-www-form-urlencoded

  • output application/x-www-form-urlencoded encoding="UTF-8", bufferSize="500"

DataWeave の ​write​ 関数では、省略可能なパラメーターとしてプロパティを渡すこともできます。プロパティのスコープは、関数をコールする DataWeave スクリプトに制限されます。

YAML

MIME タイプ: application/yaml

ライタープロパティ (YAML)

DataWeave スクリプトで ​output​ 形式として ​application/yaml​ を指定する場合、次のプロパティを追加して、DataWeave パーサーによるデータの処理方法を変更できます。

パラメーター Default (デフォルト) 説明

encoding

String (文字列)

UTF-8

使用するライターのエンコード。

bufferSize

Number (数値)

8192

バッファライターのサイズ。

deferred

Boolean (ブール)

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効なオプションは ​true​ または ​false​ です。

skipNullOn

String (文字列)

なし

指定されたデータ構造の null 値をスキップします。デフォルトでは、スキップしません。有効なオプションは ​arrays​、​objects​、​everywhere​ です。