Validation Module の例 1.4 - Mule 4

次の例は、Anypoint Studio と XML エディターの両方で Validation Module によってサポートされる操作を設定する方法を示しています。

Is IP 操作を設定する

Is IP​ 操作では、特定の IP アドレスが有効であることを検証します。IPV4 アドレスと IPV6 アドレスの両方がサポートされています。IPV6 の場合は、この操作では完全表記と省略表記の両方のアドレスがサポートされますが、ポートが含まれるアドレスはサポートされません。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is IP]​ を選択します。

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

  3. [Is IP]​ 設定画面で、次のパラメーターを設定します。

    • Ip​: payload

    • Message​: The value provided is not a valid IP address.

      Is IP の設定
      Figure 1. Is IP の設定

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

<validation:is-ip ip="#[payload]" message="The value provided is not a valid IP address"/>

Is URL 操作を設定する

Is URL​ 操作では、特定の文字列が URL として解釈できることを検証します。検証は ​java.net.URL​ クラスの URL (文字列) コンストラクターを呼び出すことによって行われます。このコンストラクターで例外がスローされた場合、検証は失敗します。このコンストラクターが受け入れたすべての文字列は有効と見なされます。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is URL]​ を選択します。

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

  3. [Is URL]​ 設定画面で、​[URL]​ 項目を ​vars.callbackUrl​ に設定します。

Is URL の設定
Figure 2. Is URL の設定

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

<validation:is-url url="#[vars.callbackUrl]"/>

Is blank string 操作を設定する

Is blank string​ 操作では、指定された値が空の文字列であることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is blank string]​ を選択します。

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

  3. [Is blank string]​ 設定画面で、​[Value (値)]​ 項目を ​payload​ に設定します。

Is blank string の設定
Figure 3. Is blank string の設定

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

<validation:is-blank-string value="#[payload]"/>

Is elapsed 操作を設定する

Is elapsed​ 操作では、指定された初期時刻から特定の時間が経過していることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is elapsed]​ を選択します。

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

  3. [Is elapsed]​ 設定画面で、次のパラメーターを設定します。

    • Time​: 20

    • Time unit (時間単位)​: SECONDS

    • Since​: vars.initialTime

Is elapsed の設定
Figure 4. Is elapsed の設定

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

<validation:is-elapsed time="20" timeUnit="SECONDS" since="#[vars.initialTime]"/>

Is email 操作を設定する

Is email​ 操作では、特定のメールが有効であることを検証します。値のデフォルトはメールペイロードです。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is email]​ を選択します。

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

  3. [Is email]​ 設定画面で、次のパラメーターを設定します。

    • Email​: vars.email

    • Message​: The value is not a valid email.

      Is email の設定
      Figure 5. Is email の設定

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

<validation:is-email email="#[vars.email]" message="The value is not a valid email"/>

Is empty collection 操作を設定する

Is empty collection​ 操作では、指定された値が空のコレクションであることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is empty collection]​ を選択します。

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

  3. [Is empty collection]​ 設定画面で、​[Value (値)]​ 項目を ​payload​ に設定します。

Is empty collection の設定
Figure 6. Is empty collection の設定

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

<validation:is-empty-collection values="#[payload]"/>

Is false 操作を設定する

Is false​ 操作では、式が ​false​ に評価されることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is false]​ を選択します。

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

  3. [Is false]​ 設定画面で、​[Expression (式)]​ 項目に ​Expression​ を選択し、空の項目に ​#[vars.withFailures]​ を追加します。

Is false collection の設定
Figure 7. Is false の設定

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

<validation:is-false expression="#[vars.withFailures]"/>

Is not blacklisted IP 操作を設定する

Is not blacklisted IP​ 操作では、特定の IP がブラックリストに登録されていないことを検証します。IP 検索条件リストは、アプリケーション内でグローバルに定義することも、各バリデーターのインラインで定義することもできます。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is not blacklisted IP]​ を選択します。

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

  3. [Is not blacklisted IP]​ 設定画面で、次のパラメーターを設定します。

    • Ip address (IP アドレス)​: vars.ip

    • Black list (ブラックリスト)​: Edit inline

    • Ips​: Edit inline

  4. プラス記号 (​+​) をクリックして IP 値ウィンドウを開きます。

  5. [Value (値)]​ 項目を ​2001:db8::/48​ に設定します。

Is not blacklisted IP collection の設定
Figure 8. Is not blacklisted IP の設定

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

<flow name="validate-not-filtered-ip">
  <validation:is-not-blacklisted-ip ipAddress="#[vars.ip]">
    <validation:black-list>
        <validation:ips>
            <validation:ip value="2001:db8::/48"/>
        </validation:ips>
    </validation:black-list>
  </validation:is-not-blacklisted-ip>
</flow>

Is not blank string 操作を設定する

Is not blank string​ では、指定された値が空の文字列でないことを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is not blank string]​ を選択します。

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

  3. [Is not blank string]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload

    • Message (メッセージ)​: The username cannot be blank

Is not blank string の設定
Figure 9. Is not blank string の設定

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

<validation:is-not-blank-string value="#[payload]" message="The username cannot be blank"/>

Is not elapsed time 操作を設定する

Is not elapsed​ 操作では、指定された初期時刻から特定の時間が経過していないことを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is not elapsed]​ を選択します。

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

  3. [Is not elapsed]​ 設定画面で、次のパラメーターを設定します。

    • Time​: 20

    • Time unit (時間単位)​: SECONDS

    • Since​: vars.time

Is not elapsed time の設定
Figure 10. Is not elapsed time の設定

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

<validation:is-not-elapsed time="20" timeUnit="SECONDS" since="#[vars.time]"/>

Is not empty collection 操作を設定する

Is not empty collection​ パラメーターでは、値が空のコレクションでないことを検証します。この値のデフォルトはペイロードです。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is not empty collection]​ を選択します。

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

  3. [Is not empty collection]​ 設定画面で、​[Value (値)]​ 項目を ​payload​ に設定します。

Is not empty collection の設定
Figure 11. Is not empty collection の設定

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

<validation:is-not-empty-collection values="#[payload]"/>

Is not null 操作を設定する

Is not null​ 操作では、指定された値が ​null​ でないことを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is not null]​ を選択します。

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

  3. [Is not null]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload

    • Message (メッセージ)​: Null is not a valid value

Is not null の設定
Figure 12. Is not null の設定

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

<validation:is-not-null value="#[payload]" message="Null is not a valid value"/>

Is null 操作を設定する

Is null​ 操作では、指定された値が ​null​ であることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is null]​ を選択します。

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

  3. [Is null]​ 設定画面で、​[Value (値)]​ 項目を ​payload​ に設定します。

Is null の設定
Figure 13. Is null の設定

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

<validation:is-null value="#[payload]"/>

Is number 操作を設定する

Is number​ 操作では、指定されたロケール (デフォルトはシステムロケール) とパターン (デフォルトはロケールパターン) を使用して、文字列を特定の数値型として解析できることを検証します。この検証には、​Min value (最小値)​ パラメーターと ​Max Value (最大値)​ パラメーターを使用して数値を検証する範囲を含めることができます。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is number]​ を選択します。

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

  3. [Is number]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload

    • Locale​: US

    • Min value (最小値)​: vars.minValue

    • Max value (最大値)​: vars.maxValue

    • Number type (数値型)​: INTEGER

Is number の設定
Figure 14. Is number の設定

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

<validation:is-number value="#[payload]"
                      minValue="#[vars.minValue]"
                      maxValue="#[vars.maxValue]"
                      numberType="INTEGER" locale="US"/>

Is time 操作を設定する

Is time​ 操作では、時刻が指定されたパターンとロケールに対して有効であることを検証します。パターンが指定されていない場合は、ロケールのデフォルトが使用されます。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is time]​ を選択します。

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

  3. [Is time]​ 設定画面で、次のパラメーターを設定します。

    • Time​: payload

    • Locale​: h:mm a

    • Pattern​: UK

Is time の設定
Figure 15. Is time の設定

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

<validation:is-time time="#[payload]" pattern="h:mm a" locale="UK"/>

Is true 操作を設定する

Is true​ 操作では、式が ​true​ に評価されることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is true]​ を選択します。

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

  3. [Is true]​ 設定画面で、​[Expression (式)]​ 項目に ​Expression​ を選択し、空の項目に ​#[vars.doReply]​ を追加します。

Is true の設定
Figure 16. Is true の設定

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

<validation:is-true expression="#[vars.doReply]"/>

Is whitelisted ip 操作を設定する

Is whitelisted ip​ 操作では、特定の IP がホワイトリストに登録されていることを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Is whitelisted ip]​ を選択します。

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

  3. [Is whitelisted ip]​ 設定画面で、次のパラメーターを設定します。

    • Ip address (IP アドレス)​: #[payload]

    • White list (ホワイトリスト)​: Edit inline

    • Ips​: Edit inline

  4. プラス記号 (​+​) をクリックして IP 値ウィンドウを開きます。

  5. [Value (値)]​ を「​192.168.1.0/24​」に設定します。

  6. 上記の 2 つの手順を繰り返し、IP アドレス ​127.0.0.1​ と ​193.1​ を追加します。

Is whitelisted ip の設定
Figure 17. Is whitelisted ip の設定

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

<flow name="FlowValidation" >
		<validation:is-whitelisted-ip ipAddress="payload">
			<validation:white-list >
				<validation:ips >
					<validation:ip value="192.168.1.0/24" />
					<validation:ip value="127.0.0.1" />
					<validation:ip value="193.1" />
				</validation:ips>
			</validation:white-list>
		</validation:is-whitelisted-ip>
	</flow>

Matches regex 操作を設定する

Matches regex​ 操作では、特定の式が Java の正規表現と一致することを検証します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Matches regex]​ を選択します。

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

  3. [Matches regex]​ 設定画面で、​[Expression (式)]​ 項目に ​Expression​ を選択し、空の項目に ​#[vars.doReply]​ を追加します。

Matches regex の設定
Figure 18. Matches regex の設定

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

<validation:matches-regex value="#[payload]" regex=".+\.log" caseSensitive="false"/>

Validate size 操作を設定する

Validate size​ 操作では、入力サイズが指定された最小値と最大値の間であることを検証します。 文字列、コレクション、マップ、および配列の入力に対して有効です。文字列の場合、サイズは文字数を意味します。

次の例は、Anypoint Studio で操作を設定する方法を示しています。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [Validate size]​ を選択します。

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

  3. [Validate size]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload

    • Min​: vars.minLength

    • Max​: vars.maxLength

Validate size の設定
Figure 19. Validate size の設定

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

<validation:validate-size value="#[payload]" min="#[vars.minLength]" max="#[vars.maxLength]"/>

[All (すべて)] スコープの設定

[All (すべて)]​ スコープでは、ネストされた検証操作のリストを評価し、すべてのエラーを要約した ​VALIDATION:MULTIPLE​ エラーを 1 つだけ返すことができます。 複数の条件を評価する必要がある場合に、同時にいくつかの検証に失敗することもあります。こうした場合、すべての説明が含まれる 1 つのエラーを生成します。​[All (すべて)]​ スコープバリデーターには、次のような性質があります。

  • すべてに失敗してもすべての検証が実行されます。

  • 一部の検証に失敗すると、1 つのエラーがスローされます。例外には複数行のメッセージが含まれ、各行は失敗した検証に対応します。

  • バリデーターはフローのスレッドを使用して順次実行されますが、バリデーターでは副作用が発生しないため、順序は重要ではありません。

  • 他の検証操作とは異なり、​[All (すべて)]​ スコープバリデーターでは ​validation:exception​ または例外のファクトリー要素を使用して例外種別やメッセージをカスタマイズできません。ただし、検証内操作のメッセージはカスタマイズできます。

次の例は、Anypoint Studio で次の内容を同時に検証する ​[All (すべて)]​ スコープバリデーターを設定する方法を示しています。

  • 名と姓が空の文字列でない。

  • 年齢が 18 より大きい有効な整数である。

  • メールアドレスが有効である。

  • 社会保障番号の長さが適切で、正規表現と一致する。

Studio で ​[All (すべて)]​ スコープを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[Validation (検証)] > [All (すべて)]​ を選択します。

  2. [All (すべて)]​ を Studio キャンバスにドラッグします。

  3. [Is not empty collection]​ 操作をフローの ​[All (すべて)]​ スコープにドラッグします。

  4. [Is not empty collection]​ 設定画面で、​[Value (値)]​ 項目を ​#[payload.firstName]​ に、​Message​ 項目を ​First name cannot be empty​ に設定します。

  5. 別の ​[Is not empty collection]​ 操作を最初の ​[Is not empty collection]​ 操作の右にドラッグします。

  6. [Is not empty collection]​ 設定画面で、​[Value (値)]​ 項目を ​#[payload.lastName]​ に、​Message​ 項目を ​Last name cannot be empty​ に設定します。

  7. [Is number]​ 操作を 2 番目の ​[Is not empty collection]​ 操作の右にドラッグします。

  8. [Is number]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload.age

    • Min value (最小値)​: 18

    • Number type (数値型)​: INTEGER

  9. [Message (メッセージ)]​ 項目を ​Not an adult​ に設定します。

  10. [Is email]​ 操作を ​[Is number]​ 操作の右にドラッグします。

  11. [Is email]​ 設定画面で、​[Email (メール)]​ 項目を ​payload.email​ に設定します。

  12. [Matches regex]​ 操作を ​[Is email]​ 操作の右にドラッグします。

  13. [Matches regex]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)
      payload.ssn

    • Regex (正規表現)
      ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$

  14. [Message (メッセージ)]​ 項目を ​Invalid SSN​ に設定します。

  15. [Validate size]​ 操作を ​[Matches regex]​ 操作の右にドラッグします。

  16. [Validate size]​ 設定画面で、次のパラメーターを設定します。

    • Value (値)​: payload.ssn

    • Min​: 11

    • Max​: 11

  17. [Message (メッセージ)]​ 項目を ​SSN too short​ に設定します。

[All (すべて)] スコープのフロー
Figure 20. [All (すべて)] スコープのフロー

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

		<validation:all >
			<validation:is-not-empty-collection values="#[payload.firstName]" message="First name cannot be empty"/>
			<validation:is-not-empty-collection values="#[payload.lastName]" message="Last name cannot be empty"/>
			<validation:is-number numberType="INTEGER"  value="#[payload.age]" minValue="18" message="Not an adult"/>
			<validation:is-email email="#[payload.email]"/>
			<validation:matches-regex value="#[payload.ssn]" regex="^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$" message="Invalid SSN"/>
			<validation:validate-size value="#[payload.ssn]" min="11" max="11" message="SSN too short"/>
		</validation:all>