HTTP エラー状況コードと理由を示す語句の例- Mule 4

次の例は、ユーザーログイン検証要求のエラー状況コードと理由を示す語句を設定できるように、HTTP 用 Anypoint Connector (HTTP Connector) の ​Listener​ ソースを設定する方法を示しています。HTTP 要求の状況コードと説明を表示するには、ブラウザー拡張機能または curlLeaving the Site​ コマンドラインユーティリティを使用します。
この例では、アドレス ​http://localhost:8081/login/​ で要求を受信することを期待しています。これらの要求には ​user​ という名前のクエリパラメーターが含まれている必要があります。このパラメーターの値に応じて、次の 2 つのいずれかが行われます。

  • パラメーターが ​user=mule​ の場合、次のようになります。

    • 検証操作がパラメーターを true として評価する。

    • Set Payload トランスフォーマーがメッセージペイロードを成功メッセージに設定する。

    • HTTP Connector が ​[Status Code (状況コード)]​ と ​[Reason (理由)]​ の変数を ​200 Log in Successful!​ として設定する。

  • パラメーターが ​user=anythingElse​ の場合、次のようになります。

    • パラメーターの検証操作アサーションが失敗する。

    • フローでエラーハンドラーがコールされる。

    • HTTP Connector が ​[Status Code (状況コード)]​ と ​[Reason (理由)]​ の変数を ​404 Requested user does not exist​ として設定する

どちらの場合も、要求の応答はレスポンスボディとしては表示されないため、ブラウザーウィンドウで要求を実行した場合は表示されません。この例を実行するには、Mule アプリケーションを作成し、HTTP グローバル要素を設定し、アプリケーションを実行し、curl コマンドでアプリケーションをテストする必要があります。

次のスクリーンショットは、この例の Anypoint Studio アプリケーションフローを示しています。

HTTP エラー状況コードと理由を示す語句のフロー

Mule アプリケーションの作成

Mule フローを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、[HTTP] の ​[Listener]​ ソースを選択してキャンバスにドラッグします。

  2. [Listener (リスナー)]​ 設定画面で、必要に応じて ​[Display Name (表示名)]​ 項目の値を変更します。

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

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

  5. [General (一般)]​ タブで、次の項目を設定します。

    • Host (ホスト)​: localhost

    • Port (ポート)​: 8081

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

HTTP リスナー設定
  1. HTTP リスナーの ​[Responses (応答)]​ タブの ​[Response (応答)]​ セクションで、​[Status Code (状況コード)]​ を ​200​、​[Reason phrase (理由を示す語句)]​ を ​Login Successful​ に設定します。

  2. [Error Response (エラー応答)]​ セクションで、​[Status Code (状況コード)]​ を ​#[vars.errorStatusCode]​、​[Reason phrase (理由を示す語句)]​ を ​#[vars.errorReasonPhrase]​ に設定します。

HTTP エラー状況コードと理由
  1. [Validation: Is True]​ 操作を [HTTP] の ​[Listener]​ ソースの後にドラッグします。

  2. [General (一般)]​ タブの ​[General (一般)]​ セクションで、ドロップダウンメニューから ​[Expression (式)]​ を選択します。​user​ クエリパラメーターを検証するには、次のコードを [expression (式)] 項目ボックスに追加します。

#[attributes.queryParams.user == 'mule']
text
Validate Module 設定
  1. [Set Payload]​ トランスフォーマーを ​[Validation: Is True]​ 操作の後にドラッグし、​[Value (値)]​ 項目を ​Log in Successful!​ に設定します。

Set Payload の設定
Figure 1. Set Payload の設定
  1. フローの ​[Error Handling (エラー処理)]​ セクションで、​On Error Propagate​ コンポーネントを追加します。

  2. On Error Propagate​ コンポーネントで、2 つの ​Set Variable​ トランスフォーマーを追加します。

    • 最初の変数で、​[Display Name (表示名)]​ を ​Set Status Code​、​[Name (名前)]​ を ​errorStatusCode​、​[Value (値)]​ を ​404​ に設定します。

    • 2 番目の変数で、​[Display Name (表示名)]​ を ​Set Reason Phrase​、​[Name (名前)]​ を ​errorReasonPhrase​、​[Value (値)]​ を ​Requested user does not exist​ に設定します。

エラー処理設定
  1. Mule アプリケーションを保存します。

  2. Package Explorer​ でプロジェクト名をクリックし、​[Run (実行)]​ > ​[Run As (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  3. cURL で、URL ​http://localhost:8081/login?user=muleLeaving the Site​ をテストします。

ユーザーが有効な場合は結果で ​200 Log in Successful!​ を返され、有効でない場合は ​404 Requested user does not exist​ が返されます。

HTTP エラー状況コードと理由を示す語句の XML

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

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:validation="http://www.mulesoft.org/schema/mule/validation"
      xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      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/validation http://www.mulesoft.org/schema/mule/validation/current/mule-validation.xsd">
    <http:listener-config name="HTTP_Listener_config" >
        <http:listener-connection host="localhost" port="8081" />
    </http:listener-config>
    <flow name="customResponseFlow" >
        <http:listener doc:name="Listener" path="/login" config-ref="HTTP_Listener_config">
            <http:response statusCode="200" reasonPhrase="Login Successful" />
            <http:error-response statusCode="#[vars.errorStatusCode]" reasonPhrase="#[vars.errorReasonPhrase]" />
        </http:listener>
        <validation:is-true expression="#[attributes.queryParams.user == 'mule']"/>
        <set-payload value="Log in Successful!" />
        <error-handler name="Error_Handler" >
            <on-error-propagate enableNotifications="true" logException="true" >
                <set-variable value="404" variableName="errorStatusCode"/>
                <set-variable value="Requested user does not exist" variableName="errorReasonPhrase"/>
            </on-error-propagate>
        </error-handler>
    </flow>
</mule>
xml