フォームの投稿の例- Mule 4

次の例は、form (フォーム) パラメーターが含まれる HTTP 要求を送信してフォームを投稿するように HTTP 用 Anypoint Connector (HTTP Connector) の Listener ソースを設定する方法を示しています。 この例を実行するには、Mule アプリケーションを作成し、HTTP グローバル要素を設定し、アプリケーションを実行し、curl コマンドを使用してフォームを投稿する必要があります。

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

フォームの投稿フロー
Figure 1. フォームの投稿フロー

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

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

  1. [Mule Palette (Mule パレット)]​ ビューで、[HTTP] の ​[Listener]​ ソースを選択してキャンバスにドラッグします。
    このソースは受信 HTTP メッセージ属性をリスンすることでフローを開始します。

  2. [Path (パス)]​ 項目を ​submitform​ に設定します。

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

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

    • Host (ホスト)​: localhost

    • Port (ポート)​: 8081

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

  6. Choice​ ルーターコンポーネントを [HTTP] の ​[Listener]​ ソースの右にドラッグします。
    Choice​ ルーターにより、条件処理がフローに追加されます。

  7. [Set Payload]​ コンポーネントを ​[Choice]​ ルーターの ​[When (条件)]​ 条件ボックスにドラッグします。

  8. [Value (値)]​ 項目を ​Sorry #[payload.'firstname'], you’re too young to register.​ に設定します。
    この式は、要求に含まれている form (フォーム) パラメーターの 1 つ ​firstname​ を参照しています。コネクタで受信したパラメーターは、Mule メッセージペイロード内にマップ内の項目として存在します。

  9. Choice​ ルーターで ​[When (条件)]​ 条件を選択します。

  10. [Expression (式)]​ 項目を ​#[server.dateTime.year-18 < payload.'yearborn']​ に設定します。
    この式は受信 form (フォーム) パラメーターの 1 つ ​yearborn​ を参照しています。

  11. 別の ​[Set Payload]​ コンポーネントを ​Choice​ ルーターの ​[Default (デフォルト)]​ 条件ボックスにドラッグします。

  12. [Value (値)]​ 項目を ​Registration has been carried out successfully! Welcome #[payload.'firstname'] #[payload.'lastname']!​ に設定します。

  13. Mule アプリケーションを保存します。

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

  15. フォームを投稿するには、curl コマンド http://localhost:8081/submitformLeaving the Site を実行します。

投稿本文には、form (フォーム) パラメーター ​firstname​、​lastname​、​yearborn​ が含まれています。

POST /submitform HTTP/1.1

User-Agent: Mule/3.6
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

firstname=Aaron&lastname=Aguilar+Acevedo&yearborn=1999
text

HTTP リスナーは要求を受信すると、次のキー-値ペアのマップ種別のペイロードが含まれる Mule メッセージを作成します。

firstname: Aaron
lastname: Aguilar Acevedo
yearborn: 1999

lastname​ パラメーターの HTTP 要求の値はエンコードされていますが (​Aguilar+Acevedo)​、Mule メッセージに配置するときにコネクタが値を自動的にデコードします。

フローの残りのどのブロックでも、MEL 式を使用して対応するキーを参照することで、マップペイロードの要素の値に簡単にアクセスできます。

前の例では、​yearborn​ キーと一致する値が、式 ​#[payload.'yearborn']​ を介して取得されます。この式の値に応じて、2 つの異なるパスのいずれかが使用されます。

  • 最初のパスでは、類似の MEL 式を使用して ​firstname​ キーと一致する値を参照し、ペイロードに登録を拒否するメッセージを設定します。

  • 2 つ目のパスでは登録を受諾し、​firstname​ と ​lastname​ の値を参照して、名前でユーザーを歓迎します。

フォームの投稿アプリケーションの XML

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

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

<mule 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:spring="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">


    <http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8081" doc:name="HTTP Listener Configuration"/>
    <flow name="RegisterUser">
        <http:listener config-ref="HTTP_Listener_Configuration" path="submitform" doc:name="HTTP"/>
        <choice doc:name="Choice">
            <when expression="#[server.dateTime.year-18 &lt; payload.'yearborn']">
                <set-payload value="Sorry #[payload.'firstname'], you're too young to register." doc:name="Too young"/>
            </when>
            <otherwise>
                <set-payload value="Registration has been carried out successfully! Welcome #[payload.'firstname'] #[payload.'lastname']!" doc:name="Success"/>
            </otherwise>
        </choice>
    </flow>
</mule>
xml