HTTP Listener ソースの設定 - Mule 4

HTTP 用 Anypoint Connector (HTTP Connector) の ​Listener​ ソースでは、HTTP サーバーをセットアップして、HTTP 要求を受信したらフローをトリガーすることができます。

ソースが受け入れるメソッド (​GET​、​POST​ やメソッドのリスト) を選択できます。HTTP 要求を受信するパスも選択できるため、さまざまなフローを使用して要求を転送することができます。

HTTP 要求を受信すると、HTTP ​Listener​ ソースは要求データを使用してフローをトリガーします。HTTP 本文はペイロードとして設定され、ヘッダーやクエリパラメーターなどの残りの HTTP データは属性として設定されます。

フローの実行終了後、HTTP ​Listener​ ソースはフロー実行が成功かどうかに基づいて異なる状況コードを返す HTTP 応答を送信します。また、ソースによって HTTP 応答がどのように生成されるかをコネクタのソース設定でカスタマイズすることができます。

HTTP リスナー接続を設定する

HTTP ​Listener​ ソースを使用するには、次の設定を使用して接続を定義する必要があります。

  • Host (ホスト)
    要求が受信される場所を示します。ホスト名 (​localhost​ など)、​www.mulesoft.com​、IP (​127.0.0.1​、​::1​ など) を指定できます。

  • Port (ポート)
    要求が受信される場所を示します。

  • Protocol (プロトコル)
    通信のプロトコルを示します。プレーンな接続の場合は HTTP、セキュアな TLS 接続の場合は HTTPS を使用します。

HTTPS を介したセキュアな接続を有効にするには、接続に TLS コンテキストを定義し、次を指定する必要があります。

  • サーバーのキーストア

  • トラストストア (相互認証が必要な場合)

TLS 設定についての詳細は、​「キーストアとトラストストアを使用した TLS の設定」​を参照してください。

さらに、すべての HTTP ​Listener​ ソースに適用される ​[Base path (ベースパス)]​ 項目を設定できます。

次の例は、Studio で HTTP ​Listener​ 接続を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [Listener]​ を Studio キャンバスにドラッグします。

  3. [Path (パス)]​ を ​/path​ に設定します。

「Path (パス)」 項目が /test に設定された HTTP リスナー設定ウィンドウ
  1. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の HTTP ​Listener​ のすべてのインスタンスで使用できるグローバル要素を設定します。

  2. [Host (ホスト)]​ を ​0.0.0.0​ に、​[Port (ポート)]​ を ​8081​ に設定します。

「Host (ホスト)」 項目が 0.0.0.0、「Port (ポート)」 項目が 8081 に設定された、HTTP リスナーのグローバル設定ウィンドウ
  1. [TLS]​ タブをクリックします。

  2. [TLS configuration (TLS 設定)]​ を ​[Edit inline (インライン編集)]​ に設定します。

  3. [Trust Store Configuration (トラストストア設定)]​ セクションで、​[Path (パス)]​ を ​keystore.jks​ に、​[Password (パスワード)]​ を ​MyP455W0rD​ に設定します。

「Path (パス)」 項目が keystore.jks、「Password (パスワード)」 項目が MyP455W0rD に設定された 「Trust Store Configuration (トラストストア設定)」 ウィンドウ
  1. [OK]​ をクリックします。

設定 XML​ エディターでは、​host​、​port​、​path​、および ​trust-store​ の設定は次のように記述されます。

	<http:listener-config name="HTTP_Listener_config" >
		<http:listener-connection host="0.0.0.0" port="8081" >
			<tls:context >
				<tls:trust-store path="keystore.jks" password="MyP455W0rD" />
			</tls:context>
		</http:listener-connection>
	</http:listener-config>
  <flow name="test" >
		<http:listenerconfig-ref="HTTP_Listener_config" path="/path"/>
	</flow>

ソースの ​[Base path (ベースパス)]​ 項目を設定する手順は、次のとおりです。

  1. HTTP ​Listener​ 設定画面で、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックしてグローバル要素を設定します。

  2. [HTTP Listener config (HTTP リスナー設定)]​ で、​[Base path (ベースパス)]​ を ​api/v1​ に設定します。

「Base path (ベースパス)」 項目が api/v1 に設定された HTTP リスナーのグローバル設定ウィンドウ
  1. [OK]​ をクリックします。

設定 XML​ エディターでは、​basePath​ 設定は次のように記述されます。

<http:listener-config name="HTTP_Listener_config" basePath="api/v1">
  <http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
プロジェクトを CloudHub にデプロイする場合、マシンのすべてのインスタンスをリスンするように ​[Host (ホスト)]​ を ​0.0.0.0​ に設定する必要があります。
テスト目的でローカルにデプロイする場合は、ローカルに生成された要求のみを受信するように ​[Host (ホスト)]​ を ​localhost​ に設定します。アプリケーションが外部の脅威から攻撃を受けにくくなります。

また、高度な設定で、接続が永続的かどうかも定義できます。永続的ではない場合、タイムアウトが設定されます。

パスの設定

HTTP ​Listener​ ソースは、フロー内のイベントトリガーとして機能するため、使用する設定と、HTTP 要求をリスンするパスを参照する必要があります。

パスは、静的 (完全一致が必要) にするか、機能のプレースホルダーを使用できます。プレースホルダーには次を使用できます。

  • ワイルドカード (​*​)
    比較対象の一部または全部と一致します。パスの末尾にワイルドカードを使用すると、未管理のリソースへの要求を取得してより適切なエラーメッセージを表示するのに役立ちます。

  • パラメーター (​{param}​)
    比較対象の一部または全部と一致するだけでなく、URI パラメーターマップ上のそれらの値も取得します。

次の例は、3 つの HTTP ​Listener​ ソースの異なるパスの設定を示しています。パスは ​[Path (パス)]​ 項目で定義されており、​[Base path (ベースパス)]​ 項目は ​api/v1​ に設定されています。

  • account/mulesoft/main-contact
    パス要求 ​http://awesome-company.com/api/v1/account/mulesoft/main-contact​ とのみ完全一致します。

  • account/{accountId}/main-contact
    類似の構造を持つすべてのパス要求 (​http://awesome-company.com/api/v1/account/salesforce/main-contact​ など) と一致し、​salesforce​ を ​accountId​ の値として保存します。

  • account/{accountId}/*
    main-contact​ とは異なるすべてのパス要求 (​http://awesome-company.com/api/v1/account/mulesoft/users​ など) と一致し、​mulesoft​ を ​accountId​ の値として保存します。

Mule アプリケーションに複数の HTTP ​Listener​ ソースがある場合、HTTP 要求は常に最も具体的なソースに転送されます。上記の例では、最初の HTTP ​Listener​ ソースは ​accountId: mulesoft​ とサフィックス ​main-contact​ を含む要求を受信し、2 番目のソースは異なる ​accountId​ 値を受信します。

許可されるメソッドを設定する

HTTP 要求は、受信した HTTP メソッドに基づいて転送されます。デフォルトでは、HTTP ​Listener​ ソースはすべてのメソッドをサポートしますが、使用可能なメソッドを制限でき、カスタムメソッドを設定することもできます。

次の例は、Studio で ​[Allowed methods (許可されるメソッド)]​ 項目を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [Listener]​ を Studio キャンバスにドラッグします。

  3. HTTP ​Listener​ ソース設定画面で、​[Advanced (詳細)]​ タブをクリックします。

  4. [Allowed Methods (許可されるメソッド)]​ を ​GET​ に設定します。

「Allowed methods (許可されるメソッド)」 項目が GET に設定された HTTP リスナー設定ウィンドウ

設定 XML​ エディターでは、​allowedMethods​ 設定は次のように記述されます。

<http:listener path="/test" allowedMethods="GET" config-ref="HTTP_Listener_config"/>

Mule アプリケーションに複数の HTTP ​Listener​ ソースがある場合、要求はメソッドと最初に一致したソースに転送されるため、デフォルトのソースは常に最後に定義する必要があります。

次の例は、​[Allowed method (許可されるメソッド)]​ 項目が ​GET​、​POST​、​PUT​ に設定された、異なる HTTP ​Listener​ ソース設定を示しています。この異なる設定により、HTTP 要求は異なるフローに転送され、データへのユーザーアクセスを指定し、制限することができます。

<flow name="main-contact-write">
  <http:listener path="account/{accountId}/main-contact" allowedMethods="POST, PUT" config-ref="HTTP_Listener_config"/>
  <!-- validate user permissions -->
  <!-- store or update main contact for accountId -->
</flow>

<flow name="main-contact-read">
  <http:listener path="account/{accountId}/main-contact" allowedMethods="GET" config-ref="HTTP_Listener_config"/>
  <!-- fetch main contact for accountId -->
</flow>

<flow name="main-contact-general">
  <http:listener path="account/{accountId}/main-contact" config-ref="HTTP_Listener_config"/>
  <set-payload value="#['The main contact resource does not support ' ++ attributes.method ++ ' requests.']"
</flow>

応答ストリーミングモードを設定する

HTTP Connector は、レスポンスボディの管理時に本文のサイズが明らかではない場合、送信するデータの種類を考慮し、​chunked​ エンコードを使用します。これによりサイズ情報のないストリームとなります。

この動作を制御するには、​[Response streaming mode (応答ストリーミングモード)]​ 項目を次のいずれかのオプションに設定します。

  • AUTO (デフォルト)
    本文のサイズが定義されている場合、​Content-Length​ エンコードを使用します。定義されていない場合は ​Transfer-Encoding: chunked​ を使用します。

  • ALWAYS
    存在するサイズデータに関係なく ​Transfer-Encoding: chunked​ を使用します。

  • NEVER
    Content-Length​ エンコードを使用し、必要に応じてストリームをコンシュームしてデータサイズを判定します。

次の例は、Studio で ​[Response streaming mode (応答ストリーミングモード)]​ 項目を設定する方法を示しています。この例では、アカウントの主連絡先データは常に ​Content-Length​ エンコードを返します。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [Listener]​ を Studio キャンバスにドラッグします。

  3. [Path (パス)]​ を ​account/{accountId}/main-contact​ に設定します。

  4. HTTP ​Listener​ ソース設定画面で、​[Advanced (詳細)]​ タブをクリックします。

  5. [Allowed Methods (許可されるメソッド)]​ を ​GET​ に設定します。

  6. [Response streaming mode (応答ストリーミングモード)]​ を ​NEVER​ に設定します。

「Allowed methods (許可されるメソッド)」 項目が GET、「Response streaming mode (応答ストリーミングモード)」 項目が NEVER に設定された HTTP リスナー設定ウィンドウ

[Configuration XML (設定 XML)]​ エディターで、​allowedMethods​ および ​responseStreamingMode​ の設定は次のように記述されます。

<flow name="main-contact-read">
  <http:listener path="account/{accountId}/main-contact" allowedMethods="GET" responseStreamingMode="NEVER" config-ref="HTTP_Listener_config"/>
  <!-- fetch main contact for accountId -->
</flow>

読み取りタイムアウトの設定

読み取りタイムアウトとは、HTTP ​Listener​ ソースが読み取りタイムアウト (ミリ秒) が経過してもデータを読み取らない場合、コネクタでタイムアウトエラーが発生することを意味します。​[Read timeout (読み取りタイムアウト)]​ 項目を使用して、クライアントが次のような HTTP 要求を送信しないようにします。

POST /test HTTP/1.1
Host: localhost:8081
Content-Length: 10000

2

読み取りタイムアウトを指定しないと、​Listener​ ソースはデータをいつまでも待機するため、接続が解放されません。​[Read timeout (読み取りタイムアウト)]​ 項目はデフォルトで 30000 に設定されます。時間単位はミリ秒です。

ソースの読み取りタイムアウトを設定するには、HTTP ​Listener​ 設定ウィンドウで ​[Read timeout (読み取りタイムアウト)]​ 項目を目的の値に設定します。

「Read timeout (読み取りタイムアウト)」 項目が 30000 に設定された 「HTTP Listener config (HTTP リスナー設定)」 ウィンドウ

設定 XML​ エディターでは、​readTimeout​ 設定は次のように記述されます。

<http:listener-config >
		<http:listener-connection host="0.0.0.0" port="8081" readTimeout="30000" />
</http:listener-config>

無効な転送エンコードヘッダーの拒否の設定

RFC7230​ と RFC2616​ に基づいて有効な Transfer-Encoding ヘッダーは ​chunked​、​deflate​、​compress​、​identity​、​gzip​ です。これらのヘッダーでは大文字と小文字は区別されません。

無効な Transfer-Encoding ヘッダーを含む要求を拒否するには、HTTP ​Listener​ 設定ウィンドウで ​[Reject invalid transfer encoding (無効な転送エンコードを拒否)]​ チェックボックスをオンにします。

「Reject invalid transfer encoding (無効な転送エンコードを拒否)」 項目が選択されている 「HTTP Listener config (HTTP リスナー設定)」 ウィンドウ

設定 XML​ エディターでは、​rejectInvalidTransferEncoding​ 設定は次のように記述されます。

<http:listener-config rejectInvalidTransferEncoding="true">
		<http:listener-connection host="0.0.0.0" port="8081" readTimeout="3000" />
</http:listener-config>

HTTP 要求の受信

HTTP ​Listener​ ソースが HTTP 要求を受信すると、HTTP 要求行からのデータにはメソッド、要求パス、クエリ、URI パラメーター、ヘッダーが属性として含まれます。本文はペイロードを設定し、​Content-Type​ ヘッダーは MIME タイプを設定します。これにより、他のコンポーネントがペイロードの MIME タイプを検査できます。たとえば、DataWeave では HTTP ペイロードを使用するのに入力情報を必要としません。​HttpRequestAttributes​ 構文を使用してヘッダー、クエリパラメーターなどの属性を参照できます。

HTTP 要求を設定するときに、​Content-Type​ ヘッダーを設定しないでください。Mule Runtime Engine は、メッセージペイロードからヘッダーを自動的に推定します。​multipart/form-data​ 形式のペイロードで ​Content-Type​ ヘッダーを設定すると、HTTP 要求は 400 エラー状況で失敗します。

さらに、HTTP 要求に ​X-Correlation-ID​ ヘッダーまたは ​MULE_CORRELATION_ID​ ヘッダー (Mule 3 との相互運用目的) のいずれかが含まれている場合、トレーサビリティ目的でメッセージの相関 ID が設定されます。

HTTP 要求の例

次の例は、HTTP 要求を示しています。

POST api/v1/account/salesforce/main-contact?overwrite=true&notify=jane.doe&notify=admin HTTP/1.1
Host: localhost:8081
Content-Type: application/json
Content-Length: 166
X-Correlation-ID: 9cf32672-4f0b-4e8b-b988-40c13aae85b4

{
  "name": "John",
  "surname": "Doe",
  "role": "Senior Vice President",
  "organization": "Marketing",
  "phone": 701222369,
  "email": "john.doe@salesforce.com"
}

メッセージの相関 ID は ​9cf32672-4f0b-4e8b-b988-40c13aae85b4​ です。

ペイロードは JSON 形式です:

{
  "name": "John",
  "surname": "Doe",
  "role": "Senior Vice President",
  "organization": "Marketing",
  "phone": 701222369,
  "email": "john.doe@salesforce.com"
}

属性は次のとおりです。

  • method: POST

  • listenerPath: api/v1/account/{accountId}/main-contact

  • requestPath: api/v1/account/salesforce/main-contact

  • relativePath: account/salesforce/main-contact

  • queryParams: エントリ ​overwrite=true​、​notify=jane.doe​、​notify=admin​ を含むマルチマップ

  • uriParams: accountId ⇒ salesforce​ を含むマップ

  • headers: エントリ ​Host=localhost:8081​、​Content-Type=application/json​、​Content-Length=166​、​X-Correlation-ID=9cf32672-4f0b-4e8b-b988-40c13aae85b4

#[payload.name ' ' payload.surname]​ のような DataWeave 式は ​John Doe​ を返します。これは、DataWeave が正しく JSON データを解釈しているためです。

#['Received a ' attributes.method ' request for account ' attributes.uriParams.accountId '. The following users are notified: ' ++ (attributes.queryParams.*notify joinBy ', ')]​ のような DataWeave 式は ​Received a POST request for account salesforce. The following users are notified: admin, jane.doe​ を返します。

HTTP リスナー属性にアクセスするには、次の表に示す DataWeave 構文を使用します。

HTTP オブジェクト Mule Runtime Engine 3.x Mule Runtime Engine 4.x

メソッド

#[inboundProperties.’http.method’]

#[attributes.method]

パス

#[inboundProperties.’http.listener.path’]

#[attributes.listenerPath]

相対パス

#[inboundProperties.’http.relative.path’]

#[attributes.relativePath]

要求 URI

#[inboundProperties.’http.request.uri’]

#[attributes.requestUri]

クエリ文字列

#[inboundProperties.’http.query.string’]

#[attributes.queryString]

クエリパラメーター

#[inboundProperties.’http.query.params’]

#[attributes.queryParams]

URI パラメーター

#[inboundProperties.’http.uri.params’]

#[attributes.uriParams]

バージョン

#[inboundProperties.’http.version’]

#[attributes.version]

スキーマ

#[inboundProperties.’http.scheme’]

#[attributes.scheme]

ヘッダー

#[inboundProperties]

#[attributes.headers]

リモートアドレス

#[inboundProperties.’http.remote.address’]

#[attributes.remoteAddress]

クライアント証明書

#[inboundProperties.’http.client.cert’]

#[attributes.clientCertificate]

マルチマップ​は、特定のキーに対して複数の値が許可される点を除き、マップと似ています。単一値セレクター (​.​) の使用時は最初の値を返しますが、複数値セレクター (​.*​) の使用時はすべての値の取得が許可されます。

Mule イベントへの HTTP 要求のマッピングの例

次の図は、HTTP 要求と Mule イベントへのマッピングの例を示しています。

HTTP 要求と Mule イベントのマッピング

DataWeave​ 言語を使用して、HTTP 要求データ属性とペイロードにアクセスします。

HTTP 要求のマルチパートフォームデータの例

次の例は、HTTP ​Listener​ ソースによって受信された HTML フォームの HTTP 要求を示しています。さらに、この例は DataWeave 式を使用して ​multipart/form-data​ コンテンツを読み取る方法を示しています。

次の HTML フォームに基づいて説明します。

<form action="http://server.com/cgi/handle"
        enctype="multipart/form-data"
        method="post">

    How would you like to identify the logo? <INPUT type="text" name="name"><BR>
    Which is the logo file? <INPUT type="file" name="logo"><BR>
    What is the main color in the logo? <INPUT type="text" name="color"><BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">

</form>

HTTP ​Listener​ ソースは次の ​multipart/form-data​ HTTP 要求を受信します:

POST /api/v1/account/mulesoft/logo HTTP/1.1
Content-Type: multipart/form-data; boundary=489691234097965980223899
Host: localhost:8081
content-length: 34332

--489691234097965980223899
Content-Disposition: form-data; name="name"

Corporate Logo
--489691234097965980223899
Content-Disposition: form-data; name="logo"; filename="MuleSoft_logo.png"
Content-Type: image/png

.PNG
.
...
IHDR.......L......~.....	pHYs...#...#.x.?v.. .IDATx....q.W.6.....~".N....t....t..#.....LD0T.CF0b..:.3......Q..@...q]U*y\c....
....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%
.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....V"H....`%.$....^6.......|..P.....IEND.B`.
--489691234097965980223899
Content-Disposition: form-data; name="color"

blue
--489691234097965980223899--

DataWeave 式を使用すると、​parts​ オブジェクトを使用して名前または項目番号で HTTP 要求の各パラメーターデータにアクセスして読み取ることができます。たとえば、​Corporate Logo​ パラメーターデータを含む HTTP 要求の 2 番目のパートにアクセスするには、​payload.parts.logo​ または ​payload.parts[1]​ を使用できます。後者は、名前が指定されない場合に便利です。

各パート内で、そのコンテンツとヘッダーにアクセスできます。たとえば、​payload.parts.color.content​ は ​blue​ を返し、​payload.parts.logo.headers.'Content-Type'​ は ​application/png​ を返します。

パートのファイル名にアクセスすることもできます。たとえば、​Content-Disposition​ ヘッダーは解析されて ​payload.parts.logo.headers.'Content-Disposition'.filename​ のような式を許可します。この場合は ​MuleSoft_logo.png​ が返されます。

マルチパートコンテンツの読み取りと書き込みについての詳細は、​「DataWeave でサポートされる形式」​を参照してください。

HTTP 応答の送信

トリガーされたフローの実行が完了すると、HTTP ​Listener​ ソースは次のデフォルトの結果のいずれかを送信します。

  • 実行成功: 200 状況コードと、本文としてメッセージペイロードを含む HTTP 応答

  • 実行失敗: 500 状況コードと、本文としてフローエラーの説明を含む HTTP エラー応答

HTTP ​Listener​ ソース設定で、次のパラメーターを指定して HTTP 応答をカスタマイズできます。

  • Body (本文)

  • Header (ヘッダー)

  • Status code (状況コード)

  • Reason phrase (理由を示す語句)

DataWeave を使用して各パラメーターのコンテンツを生成でき、変数を使用してフローからデータを伝播できます。

HTTP 応答を送信する Mule アプリケーションの作成の例

次の例は、Studio で HTTP ​Listener​ ソースの HTTP 応答を設定する方法を示しています。この例は、エンドポイントにアカウントのロゴを保存する Mule アプリケーションフローです。

  • 正常に保存されると、通常の HTTP 応答は状況コード ​201​、理由を示す語句 ​Created​、本文 ​Corporate Logo has been stored as a MuleSoft logo​ を返します。

  • 保存に失敗すると、HTTP エラー応答は ​errorCode​ 変数 (使用可能な場合) で定義された状況コードまたはデフォルトの ​500​ を返します。

    • カスタムヘッダーは ​X-Time​ を返します。

    • 本文は ​Corporate Logo could not be stored​ を返します。

    • ロゴの保存時に ​CONNECTIVITY​ エラーがある場合、返される状況コードは ​504​、他のエラーはすべて ​500​ 状況コードになります。

エラー応答の理由を示す語句が定義されていないと、HTTP Connector は状況コードに基づいて理由の語句の定義を試みます。したがって、上記で説明した HTTP 応答のシナリオでは ​Gateway Timeout​ または ​Internal Server Error​ エラーが返されることがあります。

Mule アプリケーションをテストするには、2 つの列 ​(accountId,logoName)​ を含む ​logo​ というテーブルが必要です。このテーブルは Mule を使用して作成するか、別の方法で作成することができます。たとえば、次の XML コードは、Database Connector の ​Execute script​ 操作を使用してテーブルを作成する方法を示しています。

<db:execute-script config-ref="Database_Config">
  <db:sql ><![CDATA[CREATE TABLE logo (
	accountId VARCHAR(255),
	logoName VARCHAR(255),
	PRIMARY KEY (accountId)
)]]></db:sql>
</db:execute-script>

Studio で Mule アプリケーションを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[HTTP] > [Listener]​ を選択します。

  2. [Listener]​ を Studio キャンバスにドラッグします。

  3. [Path (パス)]​ を ​/account/{accountId}/logo​ に設定します。

  4. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックして、アプリケーション内の HTTP ​Listener​ のすべてのインスタンスで使用できるグローバル要素を設定します。

  5. [Host (ホスト)]​ を ​0.0.0.0​ に、​[Port (ポート)]​ を ​8081​ に設定します。

  6. [OK]​ をクリックします。

  7. HTTP ​Listener​ 設定画面で、​[Responses (応答)]​ タブをクリックします。

  8. [Response (応答)]​ セクションで、次の値を設定します。

    • Body (本文)​: output text/plain --- vars.logoName ' has been stored as a ' vars.accountId ++ ' logo.'

    • Status code (状況コード)​: 201

    • Reason phrase (理由を示す語句)​: Created

  1. [Error Response (エラー応答)]​ セクションで、次の値を設定します。

    • Body (本文)​: vars.logoName ++ ' could not be stored.'

    • Header (ヘッダー)​:

      output application/java
      ---
        {
          "X-Time" : "50s" // 4
        }
    • Status code (状況コード)​: vars.errorCode default 500​。

「Body (本文)」、「Header (ヘッダー)」、「Status code (状況コード)」、「Reason phrase (理由を示す語句)」 項目が表示されている HTTP Listener の応答設定ウィンドウ
  1. [Set Payload]​ コンポーネントを [HTTP] の ​[Listener]​ の右にドラッグします。

  2. [Name (名前)]​ を ​logoName​ に設定します。

  3. [Value (値)]​ を式 ​payload.parts.name.content​ に設定します。

  4. 別の ​[Set Variable]​ コンポーネントを最初の ​[Set Variable]​ コンポーネントの右にドラッグします。

  5. [Name (名前)]​ を ​accountId​ に設定します。

  6. [Value (値)]​ を式 ​attributes.uriParams.accountId​ に設定します。

  7. Database の ​[Insert]​ 操作を 2 番目の ​[Set Variable]​ コンポーネントの右にドラッグします。

  8. データベース接続を設定するために、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックします。
    データベース接続の設定方法についての詳細は、​「データベース接続の設定」​を参照してください。

  9. Insert​ 操作設定画面で、​[SQL Query Text (SQL クエリテキスト)]​ 項目を ​INSERT INTO logo (accountId,logoName) VALUES (:accountId, :logoName​) に設定します。

  10. [Input parameters (入力パラメーター)]​ を式 ​{'accountId': vars.accountId as String, 'logoName': vars.logoName as String}​ に設定します。

  11. [On Error Propagate]​ コンポーネントをフローの ​[Error handling (エラー処理)]​ セクションにドラッグします。

  12. [Type (種別)]​ を ​DB:CONNECTIVITY​ に設定します。

  13. [Set Variable]​ コンポーネントを ​[On Error Propagate]​ コンポーネントにドラッグします。

  14. [Name (名前)]​ を ​errorCode​ に設定します。

  15. [Value (値)]​ を ​504​ に設定します。

  16. Mule アプリケーションを保存して実行します。

  17. 次の CURL コマンドを送信します。​curl -v -F 'data=@/path/to/MuleSoft_logo.svg' -F name=mulesoftlogo http://localhost:8081/account/muley/logo​。

人間が読み取るにはコンテンツが長すぎるため、完全なペイロードは非表示にされています。

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8081 (#0)
> POST /account/muley/logo HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Length: 5313
> Content-Type: multipart/form-data; boundary=------------------------d96e85d23101a1c3
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 201 Created
< Content-Type: text/plain; charset=UTF-8
< Content-Length: 45
< Date: Tue, 18 Jan 2022 20:30:20 GMT
<
* Connection #0 to host localhost left intact
mulesoftlogo has been stored as a muley logo.* Closing connection 0

HTTP 応答を送信する Mule アプリケーションの XML の例

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:os="http://www.mulesoft.org/schema/mule/os"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/os http://www.mulesoft.org/schema/mule/os/current/mule-os.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
	<http:listener-config name="HTTP_Listener_config" >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	<db:config name="Database_Config" >
		<db:derby-connection />
	</db:config>
	<flow name="httplistenerresponseFlow"  >
		<http:listener config-ref="HTTP_Listener_config" path="/account/{accountId}/logo">
			<http:response statusCode="201" reasonPhrase="Created">
				<http:body ><![CDATA[output text/plain --- vars.logoName ++ ' has been stored as a ' ++ vars.accountId ++ ' logo.']]></http:body>
			</http:response>
			<http:error-response statusCode="#[vars.errorCode default 500]" >
				<http:body ><![CDATA[vars.logoName ++ ' could not be stored.']]></http:body>
				<http:headers ><![CDATA[#[output application/java
        ---
        {
          "X-Time" : "50s" // 4
        }]]]></http:headers>
			</http:error-response>
		</http:listener>
		<set-variable value="payload.parts.name.content" variableName="logoName"/>
		<set-variable value="attributes.uriParams.accountId"  variableName="accountId"/>
		<db:insert doc:name="Insert" config-ref="Database_Config">
			<db:sql><![CDATA[INSERT INTO logo (accountId,logoName) VALUES (:accountId, :logoName)]]></db:sql>
			<db:input-parameters ><![CDATA[#[{'accountId': vars.accountId as String, 'logoName': vars.logoName as String}]]]></db:input-parameters>
		</db:insert>
		<error-handler >
			<on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate"  type="DB:CONNECTIVITY">
				<set-variable value="504" variableName="errorCode"/>
			</on-error-propagate>
		</error-handler>
	</flow>
</mule>