Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave では、JSON (application/json
)、XML (application/xml
)、(application/csv
) などのデータ形式の設定プロパティが提供されます。このプロパティでこれらの形式の DataWeave リーダーおよびライターの動作を変更します。たとえば、CSV リーダーのデフォルトの区切り文字はカンマ (,
) です。この形式の separator
プロパティを使用して、CSV コンテンツの別の区切り文字を指定できます。
開始する前に、DataWeave バージョン 2 (%dw 2.0
) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (%dw 1.0
) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。
次の例は、ライタープロパティを DataWeave output
ディレクティブに追加する方法を示しています。このスクリプトでは、indent = false
を使用して JSON 出力を 1 行に圧縮します。
%dw 2.0
output application/json indent = false
---
{
hello : "world",
bello : "world",
mello : "world"
}
{"hello": "world","bello": "world","mello": "world"}
次の例でも、ライター設定プロパティを output
ディレクティブに追加しています。
schemaUrl
を使用する Avro の例
header=true
を使用する Excel (XLSX) の例
schemaPath
を設定するフラットファイルの例
inlineCloseOn="empty"
を使用して空の XML 要素を閉じる XML の例
DataWeave の read
、readUrl
、および write
関数は、中括弧内の 1 つ以上のカンマ区切りプロパティ設定を受け入れます。
次のスクリプトのヘッダーの myVar
の値は、空の子要素 (<ex1></ex1>
) を含む XML サンプルを入力する read
関数です。この関数は、空の要素の値を null
に変換する XML リーダープロパティ {nullValueOn: "empty"}
を渡します。
スクリプトの本文の write
関数は myVar
の値を入力として受け入れます。この関数では、JSON ライタープロパティを {skipNullOn:"objects", writeAttributes:true}
に渡して、null
値 (<ex1>null</ex1>
) を含むオブジェクトをスキップし、属性と <ex3 a='greeting'>hello</ex3>
の値を書き込みます。
%dw 2.0
var myVar = read("<greeting><ex1></ex1><ex2>hello</ex2><ex3 a='greeting'>hello</ex3></greeting>", "application/xml", {nullValueOn: "empty"})
output application/json with binary
---
write(myVar.greeting, "application/json", {skipNullOn:"objects", writeAttributes:true})
{
"ex2": "hello",
"ex3": {
"@a": "greeting",
"__text": "hello"
}
}
リーダープロパティを readUrl
に渡す例を次に示します。
入力データを読み取るコネクタ操作では、入力 MIME タイプを識別するために使用できる outpuMimeType
項目が提供されます。この項目は、DataWeave で入力を正確に読み取るのに役立つ 1 つ以上のリーダープロパティも受け入れます。
デフォルトでは、DataWeave リーダーではカンマ (,
) が区切り文字として処理されます。ただし、CSV 入力がパイプ (|
) で区切られており、コンテンツにカンマも含まれている場合は、パイプを区切り文字として認識するように CSV リーダープロパティを設定できます。
id | name | role
1234 | Shokida,Mr. | dev
2345 | Achaval,Mr. | arch
3456 | Felisatti,Ms. | mngr
4567 | Chibana,Mr. | dev
次の例では、File Connector で Read 操作を使用してパイプ区切り (|
) の CSV 入力を読み取り、Transform Message コンポーネントで DataWeave スクリプトを使用して入力の行をカンマ区切り形式で出力します。
<flow name="ex-use-csv-reader-props" >
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="90" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<file:read doc:name="Read" config-ref="File_Config" path="staff.csv"
outputMimeType='application/csv; separator=|; header=true'/>
<ee:transform doc:name="Transform Message" >
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/csv header = false
---
payload[1]]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
例の Scheduler コンポーネント (<scheduler/>
) では、フローをトリガーするたびに Mule イベントを生成します。
Read 操作 (<file:read/>
) では、outputMimeType='application/csv; separator=|; header=true'
を使用して、入力 MIME タイプ (application/csv
)、CSV 区切り文字 (|
)、ヘッダー設定 (true
) を識別します。
Transform Message コンポーネント (<ee:transform-message/>
) のスクリプトでは、入力 CSV から 2 番目の行 (2345 , Achaval\,Mr. , arch
) が返されます。DataWeave では CSV の各行が配列のインデックスとして処理されるため、このスクリプトでは payload[1]
を使用してこの行を選択します。デフォルトの CSV 区切り文字はカンマのため、出力はカンマで区切られています。このスクリプトでは、output
ディレクティブ (output application/csv header = false
) を使用して出力から CSV ヘッダーを除外します。
payload
に設定された Logger コンポーネント (<logger/>
) では、カンマ区切りの出力を INFO としてその LoggerMessageProcessor
メッセージに書き込みます: 2345 , Achaval\,Mr. , arch
。「Mr.」の前のカンマが区切り文字として処理されないように、CSV 出力ではこのカンマがバックスラッシュでエスケープされています (Achaval\,Mr.
)。
outputMimeType
項目を介してリーダープロパティを渡す例を次に示します。
次の Mule フローでは、カンマ区切りの CSV データをパイプ区切り (|
) の CSV データに変換します。スクリプトでリテラル値を設定する代わりに、この例では、フロー内のデータ処理コンポーネントを通過する Mule イベントの一部である Mule 変数からパイプ値を選択しています。
例の Scheduler コンポーネント (<scheduler/>
) では、フローをトリガーするたびに Mule イベントを生成します。
Set Variable コンポーネント (<set-variable/>
) では、値 '|'
を含む delimiter
という名前の Mule 変数を作成します。Studio では、値は単純な文字列 (value="'|'"
) ではなく fx 式 (value="#['|']"
) として作成されます。
Transform Message コンポーネント (<ee:transform-message/>
) には、カンマ区切りの CSV 入力を読み取り、Mule 変数を使用してパイプ区切りの CSV 出力を書き込む DataWeave スクリプトが含まれます。
payload
に設定された Logger コンポーネント (<logger/>
) では、パイプ区切りの出力を INFO としてその LoggerMessageProcessor
メッセージに書き込みます: macaroni | rigatoni | ravioli | spaghetti
。
<flow name="ex-use-mule-var-as-prop-config-val" >
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="45" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<set-variable value="#['|']" doc:name="Set Variable" variableName="delimiter" />
<ee:transform doc:name="Transform Message" >
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
var myVar = read("macaroni , rigatoni , ravioli , spaghetti", "application/csv" , {"header":false, separator:','})
output application/csv with binary
---
write(myVar, "application/csv", {"header":false, "separator":vars.delimiter})]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
例のカンマ区切り入力を提供するため、Transform Message コンポーネントのスクリプトでは、read 関数を DataWeave 変数 (myVar
) への値として使用します:
var myVar = read("macaroni , rigatoni , ravioli , spaghetti", "application/csv" , {"header":false, separator:','})
パイプ区切りの出力を書き込むため、スクリプト本文の DataWeave write 関数では、カンマ区切りの入力をパイプ区切りの出力に変更します。Mule 変数 (delimiter
) からパイプ値を選択するため、この関数ではライタープロパティ設定 "separator":vars.delimiter
を引数として渡します:
write(myVar, "application/csv", {"header":false, "separator":vars.delimiter})
スクリプトでは DataWeave output
ディレクティブ `output applicatio:page-aliases をスクリプトのヘッダーで使用しています。
Studio UI で Tranform Message コンポーネントの [Preview (プレビュー)] 画面からパイプ区切りのコンテンツを表示する場合は、そのサンプルデータを作成する必要があります。
Studio アプリケーションの [Message Flow (メッセージフロー)] 領域から [Transform Message] コンポーネントをダブルクリックします。
[Context (コンテキスト)] タブの [delimiter: String] を右クリックします。これは、コンポーネントの設定 UI の左下にあります。
[Edit Sample Data (サンプルデータの編集)] を選択して、[vars-delimiter] タブを開きます。
vars-delimiter のすべてのコンテンツを delimiter
値の次のサンプルデータで置き換えます: "|"
。区切り文字は引用符で囲む必要があります。
サンプルデータについての追加の指標は、「変換出力のプレビュー」を参照してください。