進行中のベータリリース​: クラウド IDE は進行中のベータリリースです​。ベータ状態での Anypoint Code Builder の使用には、IDE で入手できる、該当するベータサービス契約条件が適用されます。

DataWeave を使用したフライトデータの変換

DataWeave を使用してフライトデータを変換して API 仕様に一致させます。

変換用のユーザースニペットを作成する

mule-xml.json​ ファイルでユーザースニペットを定義します。ユーザースニペットについての詳細は、「work-with-code-snippets.adoc」を参照してください。

  1. [Configure User Snippets (ユーザースニペットを制御)] に移動します。

  2. 開いた ​[Select Snippets File or Create Snippets (スニペットファイルを選択またはスニペットを作成)]​ 項目で、次を入力します。

    mule-xml.json (Mule XML)
    command
  3. ファイルに設定が含まれていない場合、​mule-xml.json​ では、中括弧内にコメントが提供されます。

    {
    	// Place your snippets for mule-xml here. Each snippet is defined under a snippet name and has a prefix, body and
    	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
    	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the
    	// same ids are connected.
    	// Example:
    	// "Print to console": {
    	// 	"prefix": "log",
    	// 	"body": [
    	// 		"console.log('$1');",
    	// 		"$2"
    	// 	],
    	// 	"description": "Log output to console"
    	// }
    }
    json
  4. ファイルに次のユーザースニペットコードを追加します。

    ユーザースニペットでは、Transform Message を含めいくつかの Mule コンポーネントの開始設定が提供されます。

  5. ペイロードを JSON として返す​に進みます。

ペイロードを JSON として返す

  1. Anypoint Code Builder で ​american-ws-anypoint-code-builder.xml​ を開きます。

  2. キャンバスで、Database Select 操作の下にユーザースニペット ​[Transform Message (メッセージを変換)]​ を挿入します。

    リスナーの後で ​​ (​[Add component (コンポーネントを追加)]​) アイコンをクリックして、​[Snippets (スニペット)]​ > ​[User Snippets (ユーザースニペット)]​ > ​[Transform Message (メッセージを変換)]​ に移動します。

    最初に ​[User Snippets (ユーザースニペット)]​ パネルが空になっている場合、しばらく待ってからもう一度試します。または、設定 XML から ​muledx:transform-message​ スニペットに移動します。

    強調表示されている Transform コンポーネント
    ユーザースニペット XML:
    <ee:transform doc:name="" doc:id="51fed3-afee8c">
      <ee:message>
        <ee:set-payload>
          <![CDATA[]]>
        </ee:set-payload>
      </ee:message>
    </ee:transform>
    xml
  3. 設定 XML で ​doc:name​ の値 ​[Transform Message]​ (メッセージを変換) または同様の値を ​<ee:transform/>​ コンポーネントに追加します。

    <ee:transform doc:name="Transform Message" doc:id="423214-fac9c4">
    ...
  4. <![CDATA[]]>​ 内で、メッセージペイロードを JSON 形式に出力する DataWeave スクリプトを追加します。

    <ee:transform doc:name="Transform Message" doc:id="51fed3-afee8c">
      <ee:message>
        <ee:set-payload>
          <![CDATA[
          %dw 2.0
          output application/json
          ---
          payload
          ]]>
        </ee:set-payload>
      </ee:message>
    </ee:transform>
    dataweave
  5. [Run (実行)]​ > ​[Start Debugging F5 (デバッグを開始 F5)]​ を選択して、アプリケーションを IDE 内にデプロイします。

    詳細は、​「デバッグモードでアプリケーションを実行する」​を参照してください。

  6. アプリケーションが正常にデプロイされたら、REST クライアントまたはブラウザーを使用して応答をトリガーします。

    詳細は、​「アプリケーションのテスト」​を参照してください。

  7. MySQL データベースからの応答データを参照します。次に例を示します。

    [
      {
        "planeType": "Boeing 787",
        "code2": "0001",
        "takeOffDate": "2016-01-20T00:00:00",
        "code1": "rree",
        "fromAirport": "MUA",
        "price": 541,
        "seatsAvailable": 0,
        "toAirport": "LAX",
        "ID": 1,
        "airlineName": "American Airlines",
        "totalSeats": 200
      },
        ...
    ]
    JSON

    MySQL テストサーバーを使用できない場合、このエラーが発生します。

    Cannot get connection for URL jdbc:mysql://mudb.learn.mulesoft.com:3306/ :
    Communications link failure.

    問題に対処するには、正常な応答を取得するまで再試行します。

  8. 応答データの変換​に進みます。

応答データの変換

JSON 出力を API 仕様で必要とされる構造に変換します。

Anypoint Exchange の ​American Flights API​ のフライトデータで使用する構造は、データベースへの要求で返される構造とは異なります。

必要な JSON 構造を見つけるは、​/flights​ エンドポイントへの GET メソッドの下で JSON の例を検索します。詳細は、​「Exchange で API を見つける」​を参照するか、 Exchange で API の公開バージョンLeaving the Site​を開いてください。

API 仕様の応答の構造 実際の応答の構造
[
  {
     "code": "ER38sd",
     "price": 400,
     "departureDate": "2017/07/26",
     "origin": "CLE",
     "destination": "SFO",
     "emptySeats": 0,
     "plane": {
       "type": "Boeing 737",
       "totalSeats": 150
     }
  }
]
json
[
  {
    "planeType": "Boeing 787",
    "code2": "0001",
    "takeOffDate": "2016-01-20T00:00:00",
    "code1": "rree",
    "fromAirport": "MUA",
    "price": 541,
    "seatsAvailable": 0,
    "toAirport": "LAX",
    "ID": 1,
    "airlineName": "American Airlines",
    "totalSeats": 200
  }
]
json

DataWeave を使用して応答を変換します。

  1. 設定 XML で ​<![CDATA]]>​ 内のスクリプトを DataWeave マッピングに置き換えます。

    <ee:transform doc:name="Transform Message" doc:id="51fed3-afee8c">
      <ee:message>
        <ee:set-payload>
          <![CDATA[
          %dw 2.0
          output application/json
          ---
          payload map ( payload01 , indexOfPayload01 ) -> {
            ID: payload01.ID,
            code: (payload01.code1 default "") ++ (payload01.code2 default ""),
            price: payload01.price default 0,
            departureDate: payload01.takeOffDate as String default "",
            origin: payload01.fromAirport default "",
            destination: payload01.toAirport default "",
            emptySeats: payload01.seatsAvailable default 0,
            plane: {
              "type": payload01.planeType default "",
              totalSeats: payload01.totalSeats default 0
            }
          }
          ]]>
        </ee:set-payload>
      </ee:message>
    </ee:transform>
    xml
  2. 設定 XML を確認します。

  3. アプリケーションを実行してテストする​に進みます。

アプリケーションを実行してテストする

  1. [Run (実行)]​ > ​[Start Debugging F5 (デバッグを開始 F5)]​ を実行して、アプリケーションを IDE 内にデプロイします。

    詳細は、​「デバッグモードでアプリケーションを実行する」​を参照してください。

  2. アプリケーションが正常にデプロイされたら、REST クライアントまたはブラウザーを使用してフローをトリガーします。

    詳細は、​「アプリケーションのテスト」​を参照してください。

    変換されたデータ構造が API 要件に準拠していることを確認します。次に例を示します。

    [
        {
            "ID": 1,
            "code": "rree0001",
            "price": 541,
            "departureDate": "2016-01-20T00:00:00",
            "origin": "MUA",
            "destination": "LAX",
            "emptySeats": 0,
            "plane": {
                "type": "Boeing 787",
                "totalSeats": 200
            }
        },
        ...
    JSON
  3. アプリケーションを停止します。

    詳細は、​「アプリケーションを停止する」​を参照してください。

  4. 『American Flights API 仕様の実装』に進みます。