Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule メッセージは、Mule アプリケーションのフロー内で処理されるときに、通常は外部ソースのメッセージコンテンツとメタデータのコンテナとして機能する、Mule イベントの一部です。
Mule イベントは不変であるため、Mule メッセージを変更するたびに新しいインスタンスが作成されます。メッセージを受信するフロー内の各プロセッサーは、次の要素で構成される新しい Mule メッセージを返します。
メッセージpayload
。メッセージの本文が含まれます。たとえば、ファイルのコンテンツ、HTTP 本文、データベースのレコード、REST または Web サービス要求への応答が含まれます。
メッセージ attributes
。HTTP ヘッダーやクエリパラメーターなどのペイロードに関連付けられたメタデータ。
Mule イベントソースは、Mule メッセージを使用して Mule イベントを作成してイベントソースが含まれる Mule フローを実行するプロセスをトリガーします。たとえば、このプロセスは HTTP Listener ソースが要求を受信するか Scheduler が実行されるたびに開始されます。
フローが実行を開始した後で、ダウンストリームプロセッサー (コアコンポーネント、File Read 操作、HTTP Request 操作など) は、その設定に従って、Mule イベントに存在する Mule メッセージデータ (ペイロードと属性) を取得、設定、処理できます。
Anypoint Studio では、DataSense Explorer にフローの特定ポイントでの Mule メッセージの構造が表示されます。
メッセージペイロードには、メッセージのコンテンツまたは本文が含まれます。たとえは、ペイロードには HTTP 要求の結果、Database Connector の Select 操作で取得したレコードのコンテンツ、または File Connector や 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 要求」など) で確認できます。