Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule メッセージは、Mule アプリケーションのフロー内で処理されるときに、通常は外部ソースのメッセージコンテンツとメタデータのコンテナとして機能する、Mule イベントの一部です。
Mule イベントは不変であるため、Mule メッセージを変更するたびに新しいインスタンスが作成されます。メッセージを受信するフロー内の各プロセッサーは、次の要素で構成される新しい Mule メッセージを返します。
メッセージpayload
。メッセージの本文が含まれます。たとえば、ファイルの内容、データベースのレコード、REST または Web サービス要求への応答が含まれます。
メッセージattributes
。ペイロードに関連付けられたメタデータ。
Mule メッセージは、HTTP リスナーが応答を受信したときや Scheduler コンポーネントがフローの実行をトリガーしたときと同様に、Mule フロー内のメッセージソースがフローの開始をトリガーしたときに Mule イベントの一部として作成されます。
たとえば、Mule アプリケーションの HTTP リスナーは応答を受信したときに、応答のコンテンツをそのペイロードとして含み、そのコンテンツに関連付けられたメタデータも含む Mule メッセージを使用して Mule イベントを作成します。フロー内のメッセージプロセッサー (コアコンポーネント、File Read 操作、HTTP Request 操作など) は、その設定に従って、Mule イベントに存在する Mule メッセージデータを取得、設定、処理できます。
Anypoint Studio では、DataSense Explorer にフローの特定ポイントでの Mule メッセージの構造が表示されます。
メッセージペイロードには、メッセージのコンテンツまたは本文が含まれます。たとえは、ペイロードには HTTP 要求の結果、Database Connector の Select 操作で取得したレコードの内容、またはファイルコネクタや FTP Connector への Read 操作で取得したファイルの内容が含まれる可能性があります。
ペイロードのコンテンツは、フロー内を移動するにつれ、Mule フロー内のメッセージプロセッサーによって設定、強化、新しい形式への変換、情報の抽出、または Mule イベント変数への保存と新規ペイロードの生成が行われたときに変更されます。
Mule メッセージのペイロードは、Mule Runtime 変数 payload
を使用する DataWeave 式で選択できます。
たとえば、https://jsonplaceholder.typicode.com/users
の JSON コンテンツに対する HTTP 要求への応答の payload
を表示するように設定された Logger コンポーネントでは、次の例のような JSON コンテンツが Studio コンソールに出力されます。
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
}
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "Shanna@melissa.tv",
"address": {
"street": "Victor Plains",
"city": "Wisokyburgh",
"zipcode": "90566-7771",
"geo": {
"lat": "-43.9509",
"lng": "-34.4618"
}
}
}
]
単純な JSON ファイルに対する File Read 操作の出力の payload
を表示するように設定された Logger コンポーネントでは、次の例のような JSON コンテンツが Studio コンソールに出力される可能性があります。
{ "hello" : "world" }
フロー内の次のメッセージプロセッサーは、このペイロードに対して、payload.'hello'
を含むペイロード内の JSON オブジェクトの値を選択し、先行する JSON ペイロードを文字列 "world"
で置き換えるアクションなどを実行できます。
属性には、メッセージの本文 (またはペイロード) に関連付けられたメタデータが含まれます。メッセージの特定の属性は、そのメッセージに関連付けられたコネクタ (HTTP、FTP、ファイルなど) によって異なります。メタデータはコネクタによって受信または返されたヘッダーとプロパティ、およびコネクタまたはコアコンポーネント (Transform Message など) によって入力された他のメタデータで構成されます。
Mule メッセージの属性は、Mule Runtime 変数 attributes
を使用する DataWeave 式で選択できます。
たとえば、Logger コンポーネントを介して HTTP 応答メタデータを表示する attributes
変数を使用している場合、次の例のような HTTP 応答属性が Studio コンソールに出力されます。
{
Status Code=200
Reason Phrase=OK
Headers=[
date=Sun, 20 Jan 2019 19:13:51 GMT
content-type=text/html;
charset=UTF-8
transfer-encoding=chunked
connection=keep-alive
set-cookie=__cfduid=d03462713a0b2c57c8d2ad3bf311287041548011631;
expires=Mon, 20-Jan-20 19:13:51 GMT;
path=/;
domain=.typicode.com;
HttpOnly
x-powered-by=Express
vary=Origin, Accept-Encoding
access-control-allow-credentials=true
cache-control=public, max-age=14400
last-modified=Tue, 15 Jan 2019 18:17:15 GMT
via=1.1 vegur
cf-cache-status=HIT
expires=Sun, 20 Jan 2019 23:13:51 GMT
expect-ct=max-age=604800,
report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server=cloudflare
cf-ray=49c3dc570c2f281c-SJC
]
}
この例は、Web ページ https://jsonplaceholder.typicode.com/users
に対する HTTP Request 操作からの応答です。
各属性は、等号 (=
) で区切られたキー-値のペアになっています。フローでコネクタまたはコンポーネント (Logger など) を使用する場合、attribute
変数を特定の属性やその内部属性と共に使用して、必要な属性値 (状況コードやコンテンツタイプなど) を選択できます。たとえば、次の構文を使用して HTTP 応答で属性の値を選択できます。
attributes.statusCode
: 200
などの HTTP 状況コードを選択。
attributes.headers.date
: HTTP 応答のヘッダーから Sun, 20 Jan 2019 18:54:54 GMT
を選択。
attributes.headers.'content-type'
: HTTP コンテンツタイプ application/json
を選択。
content-type
などの内部属性を選択するには、名前 content-type
を引用符で囲む必要があります。DataWeave では 属性名の有効な識別子 で記述されたルールが内部値に適用されるため、date
などの値を引用符で囲む必要はありません。状況コード値を選択するセレクターで 'Status Code'
または "Status Code"
ではなく statusCode
を使用する理由については、該当のセクションの「注意」を参照してください。
ファイルメタデータの場合、属性は異なります。たとえば、Logger コンポーネントを介してファイルメタデータを表示する attributes
変数を使用している場合、次の例のようなコンテンツが Studio コンソールに表示されます。
LocalFileAttributes[
lastModifiedTime=2019-01-20T08:17:55,
lastAccessTime=2019-01-20T10:54:55,
creationTime=2019-01-20T08:17:55,
size=22,
regularFile=true,
directory=false,
symbolicLink=false,
path=/Users/me/Desktop/myJson.json,
fileName=myJson.json
各属性は、キー-値のペア (fileName=myJson.json
など) になっています。属性の値を選択するには、次のようにそのキーを参照します。
attributes.'fileName'
: ファイルの名前 (myJson.json
) を返す。
attributes.size
: ファイルのサイズ (22
) を返す。
「有効な識別子を宣言するためのルール」で説明されているルールに従う属性名については、引用符を使用せずにアクセスおよび宣言できます。
有効な識別子ではない属性を使用するには、次のいずれかの文字で属性名を囲みます。
単一引用符 ('
)
二重引用符 ("
)
バッククォート (`
)
たとえば、次の DataWeave 変数宣言について考えてみます。
var myVar = {
id : "1234",
"123 abc !@#" : "some_value"
}
属性名 123 abc !@#
は有効な識別子ではないため、引用符またはバッククォートを使用して宣言する必要があります。
属性 123 abc !@#
の値 ("some_value"
) にアクセスするには、引用符またはバッククォートを使用します。
myVar.'123 abc !@#'
属性名が有効な識別子の場合も、引用符またはバッククォートを使用して属性を宣言したり、属性の値を選択したりできます。
前述の変数宣言の例では、属性 id
は引用符を使用せずに宣言されています。id
に保存された値にアクセスするには、次のいずれかの方法を使用できます。
myVar.id
myVar.'id'
myVar."id"
myVar.
id``
注意: コンソール出力に表示される、人間が解読できる最上位属性の名前 (Status Code
など) は、属性の選択で使用する名前 (statusCode
) とは異なる可能性があります。人間が解読できる名前 Status Code
を引用符で囲むと、その最上位属性が選択可能になるのではなく null
が返されます。最上位属性名 (Status Code
、Reason Phrase
、Headers
など) の選択に使用する構文は、Studio のオートコンプリートを使用して確認できるほか、コネクタのドキュメント (「HTTP 要求」など) で確認できます。