Transform (<ee:transform/>)

このコンポーネント内に DataWeave スクリプトを記述して、Mule メッセージペイロード、属性、または変数を必要な出力形式とデータ構造に設定または変換します。

DataWeave は、インテグレーションと実装でのすべての式とデータ変換のためのプログラミング言語です。この言語は、独自の関数、ライブラリ、データ型などのカスタマイズを作成するための関数ライブラリとメカニズムを提供します。DataWeave の基本を学習し、DataWeave スクリプトを試すには、 DataWeave のチュートリアルとプレイグラウンド​を参照し、​DataWeave ドキュメント​で DataWeave の関数とその言語に関する案内を確認してください。

コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

<ee:transform doc:name="Transform" doc:id="xnpgke" >
    <ee:message >
        <ee:set-payload ><![CDATA[%dw 2.0
output application/java (1)
---
//DataWeave script (2)
]]></ee:set-payload>
        </ee:message>
    </ee:transform>
1 application/java​ 形式を設定する DataWeave スクリプトの ​output​ ディレクティブ

サポートされるデータ形式を参照してください。

2 DataWeave スクリプトの本文の場所

Transform コンポーネント (​<ee:transform/>​) 内に ​DataWeave スクリプト​を記述して、​Mule イベント​の任意の部分のコンテンツを作成または変換します。

<ee:message/>​ と ​<ee:variables/>​ は Transform (​<ee:transform/>​) の子要素です。

  • <ee:message/>​ は、Mule メッセージのペイロードと属性を作成または変換するための子要素を受け入れます。

    要素名 要素 XML 説明

    Set Payload (ペイロードを設定)

    <ee:set-payload/>

    Mule メッセージペイロード​を設定または変換します。​<ee:message/>​ のこの子要素は DataWeave スクリプトを受け入れます。1 つの ​<ee:set-payload/>​ 要素が許可されます。

    Set attribute (属性を設定)

    <ee:set-attributes/>

    1 つ以上の Mule メッセージ属性を設定または変換します。​<ee:message/>​ のこの子要素は DataWeave スクリプトを受け入れます。1 つの ​<ee:set-attributes/>​ 要素が許可されます。

  • <ee:variables/>​ は、Mule 変数を作成または変換するための子要素を受け入れます。

    要素名 要素 XML 説明

    Set Variables (変数を設定)

    <ee:set-variable/>

    Mule 変数​を設定または変換します。​<ee:variables/>​ のこの子要素は DataWeave スクリプトを受け入れます。1 つ以上の ​<ee:set-variable/>​ 要素が許可されます。

次の例は、インライン変換を設定し、DataWeave スクリプトをコールして変換を適用する方法を示しています。

例: インライン DataWeave 変換

次の例では、インライン DataWeave スクリプトを使用してペイロードを設定します。

<ee:transform
  doc:id="747f74"
  doc:name="Transform" >
    <ee:message>
        <ee:set-payload>
          <![CDATA[%dw 2.0
            output application/xml
            ---
            example: {
                message @(id: "DSF-829"): "Hello World!",
                date: |2017-03-21|,
                items:
                {
                    item1: 728,
                    item2: "14422"
                }
            }
          ]]>
       </ee:set-payload>
    </ee:message>
</ee:transform>

<ee:set-payload/>​ 内の DataWeave スクリプトは、次の XML 出力をメッセージのペイロードとして返します。

<example>
  <message id="DSF-829">Hello World!</message>
  <date>2017-03-21</date>
  <items>
    <item1>728</item1>
    <item2>14422</item2>
  </items>
</example>

例: 外部 DataWeave スクリプトのコール

次の例では、​DWL ファイル​内の外部 DataWeave スクリプトをコールしてペイロードを設定します。

<ee:transform doc:id="747f74d"
  doc:name="Transform" doc:mode="immediate">
    <ee:message>
      <ee:set-payload resource="myscript.dwl" />
    </ee:message>
</ee:transform>

DWL ファイルを Mule プロジェクトフォルダーの ​src/main/resources​ ディレクトリに追加します。たとえば、そのフォルダーに ​myscript.dwl​ という名前のファイルを作成し、​例: インライン DataWeave 変換​に示された DataWeave スクリプトを指定できます。

%dw 2.0
output application/xml
---
example: {
    message @(id: "DSF-829"): "Hello World!",
    date: |2017-03-21|,
    items:
    {
        item1: 728,
        item2: "14422"
    }
}

Transform の例​を含むフローをトリガーすると、スクリプトは​例: インライン DataWeave 変換​によって返されるペイロードを返します。

例: ペイロード、属性、変数の変換

次の例では、ユーザーデータを要求するフローをトリガーし、​<ee:transform/>​ を設定してユーザーデータペイロードを変換し、HTTP 要求の状況コードを提供する属性を選択し、Mule 変数の値を設定します。この例のロガーは、フローで Mule イベント内の値を追跡するのに役立ちます。

<http:listener-config name="HTTP_Listener_config" >
  <http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration" doc:name="HTTP Request configuration" >
  <http:request-connection port="443" />
</http:request-config>

<flow name="myFlow" >
  <http:listener path="/mytrigger" config-ref="HTTP_Listener_config"
    doc:name="Listener" doc:id="kiohjs" /> (1)
  <http:request method="GET" doc:name="Request"
     config-ref="HTTP_Request_configuration"
     url="https://jsonplaceholder.typicode.com/users"/> (2)
  <set-variable variableName="myVar" value="myVar Value"
    doc:name="Set variable" doc:id="tgwhvc" /> (3)
  <logger level="INFO" message="#[payload[0]]" doc:name="Logger Payload"
    doc:id="9dbeda-430b1f" category="LOGGER-PAYLOAD-1"/> (4)
  <logger level="INFO" message="#[attributes]" doc:name="Logger Attributes"
    doc:id="9dbeda-430b1g" category="LOGGER-ATTRIBUTES-1"/> (5)
  <logger level="INFO" message="#[vars]" doc:name="Logger Variables"
    doc:id="9dbeda-430b1h" category="LOGGER-VARIABLES-1"/> (6)
  <ee:transform doc:name="Transform" doc:id="qtxpfa" > (7)
      <ee:message>
          <ee:set-payload>
            <![CDATA[%dw 2.0
                output application/json
                ---
                payload.id
            ]]>
          </ee:set-payload>
          <ee:set-attributes>
            <![CDATA[%dw 2.0
            output application/json
            ---
            {
                'status-code' : attributes.statusCode
            }]]>
          </ee:set-attributes>
      </ee:message>
      <ee:variables>
          <ee:set-variable variableName="myVar2">
              <![CDATA[%dw 2.0
                  output application/json
                  ---
                  vars.myVar
              ]]>
          </ee:set-variable>
          <ee:set-variable variableName="myVar3">
              <![CDATA[%dw 2.0
              output application/json
              ---
              {
                  'myNewVar' : 'myvariable3'
              }]]>
          </ee:set-variable>
      </ee:variables>
  </ee:transform>
  <logger level="INFO" message="#[payload]" doc:name="Logger Payload 2"
          doc:id="9dbeda-430b1c" category="LOGGER-PAYLOAD-2"/> (8)
  <logger level="INFO" message="#[attributes]" doc:name="Logger Attributes 2"
          doc:id="9dbeda-430b1d" category="LOGGER-ATTRIBUTES-2"/> (9)
  <logger level="INFO" message="#[vars.myVar2]" doc:name="Logger Variables 2"
          doc:id="9dbeda-430b1e" category="LOGGER-VARIABLES-2"/> (10)
  <logger level="INFO" message="#[vars.myVar3.myNewVar]"
          doc:name="Logger Variables 3"
          doc:id="9dbeda-430b1g" category="LOGGER-VARIABLES-3"/> (11)
</flow>
1 <http:listener/>​ は、エンドポイント ​/mytrigger​ でローカルホストポート ​8081​ への要求からフローをトリガーする HTTP Listener 操作を設定します。
2 <http:request/>​ は、JSON データサンプルの HTTP 要求操作を設定します。
3 <set-variable/>​ は、Mule 変数 ​myVar​ を文字列値​「myVar Value」​に設定します。
4 LOGGER-PAYLOAD-1​ は、​payload[0]​ の値を出力します。これは、 https://jsonplaceholder.typicode.com/users​ にあるユーザーオブジェクトの配列の最初のインデックスです。
5 LOGGER-ATTRIBUTES-1​ は、状況コード、理由を示す語句、ヘッダーなど、HTTP 要求から返された HTTP メタデータを出力するために、定義済み Mule 変数 ​attributes​ に設定されます。

attributes​ およびその他の Mule 変数についての詳細は、定義済み変数を参照してください。

6 LOGGER-VARIABLES-1​ は、Mule イベントで Mule 変数を記述するオブジェクトを出力するために、​vars​ に設定されます。
{myVar=TypedValue[value: 'my VarValue',
  dataType: 'SimpleDataType{type=java.lang.String,
  mimeType='*/*; charset=UTF-8'}']}
7 <ee:transform/>​ は、Mule イベントのペイロード、属性、および変数データを選択して変換する DataWeave スクリプトを提供します。
  • <ee:set-payload/>​ は、ペイロード配列内のユーザーオブジェクトから ​id​ 値を選択します。

  • <ee:set-attributes/>​ は、​attributes.statusCode​ を使用して、HTTP 要求メタデータから状況コード値を選択します。

    すべてのメタデータが選択可能です。たとえば、​attributes.reasonPhrase​ で理由を示す語句を選択し、​attributes.headers​ でヘッダーを選択できます。詳細は、DataWeave セレクターを参照してください。

  • <ee:variables/>​ は、新しい Mule 変数を作成します。最初の ​<ee:set-variable/>​ は、​myVar2​ を ​myVar​ 変数 (​vars.myVar​) の値に設定します。2 つ目は、文字列​「myvariable3」​に対して ​myVar3​ という名前の変数を作成します。

8 LOGGER-PAYLOAD-2​ は、​payload​ の変換された値を出力します。これはユーザー ​id​ 値の配列 (​[1,2,3,4,5,6,7,8,9,10]​) になります。
9 LOGGER-ATTRIBUTES-2​ は、​attributes​ の変換された値を出力します。これは JSON オブジェクト ​{ "status-code": 200 }​ になります。
10 LOGGER-VARIABLES-2​ は、Mule 変数 ​vars.myVar2​ の値 (文字列​「myVar Value」​) を出力します。
11 LOGGER-VARIABLES-3​ は、Mule 変数 ​vars.myVar3.myNewVar​ の値 (文字列​「myvariable3」​) を出力します。

ログの出力は次のようになります (読みやすいように編集済み)。

INFO  2023-10-24 16:59:43,279 ...
  [processor: myFlow/processors/2; event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-PAYLOAD-1: {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  }
INFO  2023-10-24 16:59:43,333 ...
  [processor: myFlow/processors/3; event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-ATTRIBUTES-1: org.mule.extension.http.api.HttpResponseAttributes
    {
       Status Code=200
       Reason Phrase=OK
       Headers=[
          date=Wed, 25 Oct 2023 20:00:48 GMT
          content-type=application/json; charset=utf-8
          transfer-encoding=chunked
          connection=keep-alive
          x-powered-by=Express
          x-ratelimit-limit=1000
          x-ratelimit-remaining=999
          x-ratelimit-reset=1698156189
          vary=Origin, Accept-Encoding
          access-control-allow-credentials=true
          cache-control=max-age=43200
          pragma=no-cache
          expires=-1
          x-content-type-options=nosniff
          etag=W/"160d-1eMSsxeJRfnVLRBmYJSbCiJZ1qQ"
          via=1.1 vegur
          cf-cache-status=HIT
          age=21484
          report-to={"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=abcdefg1234..."}],"group":"cf-nel","max_age":604800}
          nel={"success_fraction":0,"report_to":"cf-nel","max_age":604800}
          server=cloudflare
          cf-ray=81bd0c408c729685-SJC
          alt-svc=h3=":443"; ma=86400
       ]
    }
INFO  2023-10-24 16:59:43,347 ... [processor: myFlow/processors/4;
  event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-VARIABLES-1: {myVar=TypedValue[value: 'myVar Value',
    dataType: 'SimpleDataType{type=java.lang.String, mimeType='*/*; charset=UTF-8'}']}
INFO  2023-10-24 16:59:43,512 ... [processor: myFlow/processors/6;
  event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-PAYLOAD-2: [
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10
  ]
INFO  2023-10-24 16:59:43,519 [processor: myFlow/processors/7;
  event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-ATTRIBUTES-2: {
    "status-code": 200
  }
INFO  2023-10-24 16:59:43,528 ... [processor: myFlow/processors/8;
  event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-VARIABLES-2: "myVar Value"
INFO  2023-10-24 16:59:43,576 ... [processor: myFlow/processors/9;
  event: 6699ea20-72c9-11ee-b3b5-147ddaaf4f97]
  LOGGER-VARIABLES-3: "myvariable3"