Muleを扱う上でよく使うであろうTransform Messageについて取り上げます。
今回使うコンポーネント
コンポーネント | アイコン | 用途 |
---|---|---|
Transform Message | Inputに対し、形式を指定し出力する |
Transform Messageの特徴
- Inputを指定し、Outputで指定した形式に変換する
- デフォルトではOutputはペイロードだが、指定先を変数にすることも可能
- 変換のロジックはDataWeaveが使用され、言語や関数に基づいて変換される
Transform Messageを使ってみる
では実際にどのように変換されるのか、実際に動かしてみましょう。今回はDataWeaveの詳細までは触れないので、簡単な変換に留めます。
やり方としては大きく2つ。
型を定義してマッピング
まず、1つ目の方法として、型を指定してマッピングする方法があります。こちらの方法はDataWeaveの知識があまりなくても、GUIベースで変換ルールが作れるため初心者におすすめです。
まず、Inputの材料として、変数を作ります。今回は果物の数を表示するため、apple、banana、orangeでそれぞれ変数を作り、数値をそれぞれ設定します。
Transform MessageをSet Variableの後に配置します。このような形のフローにします。
次にOutputとなるデータ型を定義します。今、output欄がUndefined(未定義)になっています。これを、各フルーツの数を格納するオブジェクト形式に変換してみます。
「Defined metadate」のリンクを押下して
+アイコンからデータ型を作成します。Type idを「fruits」としてCreate Typeを押下します。
デフォルトではString型になっているため、上のType欄を「Object」にします。
その下の表示が切り替わります。javaのクラスから取り込むことも可能ですが、今回はJavaを作成していないため、RAMLから定義してみましょう。下の選択欄を「RAML Definition」に選択します。
RAMLがデフォルトで記載されていますが、以下のように記載します。
#%RAML 1.0 DataType
type: object
properties:
apple:
type: number
banana:
type: number
orange:
type: number
RAMLまで記載したら、Selectを押して型定義が終了です。これで、apple、banana、orangeの数を格納するデータの入れ物が作成できました。今回はRAMLによる型定義をしましたが、Javaから取り込んだりJSONから取得したりと作り方は様々なので色々試してみてください。
最後に変数にあるInputと先ほど定義したOutputをマッピングします。Transform MessageにあるInput欄のVariablesにそれぞれの変数があるかと思います。まず、appleをOutputにあるappleにドラッグアンドドロップします。
すると、線が追加され、さらに右側のテキスト欄が更新されます。右側のテキスト欄については後ほど触れたいと思います。同じ容量でbanana、orangeに対してもマッピングします。
Transform MessageのOutput値はデフォルトでpayloadに格納されます。payload以外にする場合は、鉛筆アイコンや追加アイコンで切り替えることが可能ですが今回はpayloadをOutput先にするため変更はしないでいきたいと思います。
このような形にして、フローを実行します。
フローを実行すると、このように見づらい形となって表示されます。これはJava型として変換されているためです。
これをもうちょっと見やすくするために、次で紹介するDataWeaveを使用して変換ロジックを整理していきたいと思います。
DataWeaveに変換ロジックを記述
上記のマッピングで配置したときに、右側のテキスト欄が自動的に更新されていることにお気づきでしょうか?もう一つの方法は、このテキスト欄を直接記述する方法になります。記述の際は、DataWeaveをある程度覚えておく必要はありますが、複雑な変換や固定値など柔軟性がある変換ルールを記載できることができるため、Muleに慣れている人はこちらの方法で使用する方法が多いです。
Javaの形式で出力されているので、JSON形式の見やすい形に編集してみましょう。Outputとあるテキスト欄から「application/java」の部分を「application/json」に変更してフローを実行します。
このようにJSON形式のスッキリする形となりました。
Transform Messageのテキスト部分が変換ロジックの部分となるため、こちらを編集することで変化ロジックをある程度自在に記載することができます。マッピングではできなかった範疇での変換ルールの記載も可能です。
上記は果物の数を表示するだけでしたが、さらに手を加えてみましょう。各果物の数に応じた価格もJSONの出力に入れるようにします。りんご100円、バナナ120円、オレンジ80円としてそれぞれの小計値を表示します。
%dw 2.0
output application/json
---
{
apple: vars.apple,
applePrice: 100 * vars.apple,
banana: vars.banana,
bananaPrice: 120 * vars.banana,
orange: vars.orange,
orangePrice: 80 *vars.orange
}
このように計算式にも対応することができます。計算式や固定値などはマッピングで対応することができないため、テキスト欄を編集して出力を記載していく形になります。
最後に
Transform Messageの使い方について簡単に紹介しました。今回は簡単な変換でしたが、Data Weaveを使いこなすことで、より応用が効く形となるため、DataWeaveについての徐々に覚えておくようにしておきましょう。
コメント