コネクタ操作を介したリーダープロパティの使用

入力データを読み取るコネクタ操作では、​入力​ MIME タイプを識別するために使用できる ​outpuMimeType​ 項目が提供されます。この項目は、DataWeave で入力を正確に読み取るのに役立つ 1 つ以上のリーダープロパティも受け入れます。

デフォルトでは、DataWeave リーダーではカンマ (​,​) が区切り文字として処理されます。ただし、CSV 入力がパイプ (​|​) で区切られており、コンテンツにカンマも含まれている場合は、パイプを区切り文字として認識するように CSV リーダープロパティを設定できます。

パイプ区切りの CSV 入力
id | name | role
1234 | Shokida,Mr. | dev
2345 | Achaval,Mr. | arch
3456 | Felisatti,Ms. | mngr
4567 | Chibana,Mr. | dev

開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​DataWeave バージョン 1.2 の例​を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

次の例では、File Connector で Read 操作を使用してパイプ区切り (​|​) の CSV 入力を読み取り、Transform Message コンポーネントで DataWeave スクリプトを使用して入力の行をカンマ区切り形式で出力します。

Mule フロー:
<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​ 項目を介してリーダープロパティを渡す例を次に示します。

  • streaming=true; header=true​ を使用する ​CSV の例

  • streaming=true​ を使用する ​JSON の例