10.7. バリデーター
バリデーターは、メッセージタイプを宣言するルート定義で、宣言された Input Type
や Output Type
に従って、メッセージの宣言的検証を実行します。
検証は、type 宣言の validate
属性が true の場合にのみ実行されます。
Input Type
や Output Type
の宣言で validate
属性が true の場合、Camel 内部プロセッサーはレジストリーから対応するバリデーターを検索します。
10.7.1. データタイプフォーマット
データタイプのフォーマットは scheme:name
です。scheme は、java
、xml
、または json
といったデータモデルのタイプで、name はデータタイプ名です。
10.7.2. サポート対象のバリデーター
バリデーター | 説明 |
---|---|
述語バリデーター | 式または述語を使用して検証します。 |
エンドポイントバリデーター | Validation Component や Bean Validation Component などの検証コンポーネントと使用する Endpoint へ転送して検証します。 |
カスタムバリデーター |
カスタムバリデータークラスを使用して検証します。Validator は |
10.7.3. 共通オプション
すべてのバリデーターには検証する データタイプ を指定する type オプションが含まれている必要があります。
10.7.4. 述語バリデーターのオプション
名前 | 説明 |
---|---|
expression | 検証に使用する式または述語。 |
検証の述語を指定する例:
Java DSL の場合
validator() .type("csv:CSVOrder") .withExpression(bodyAs(String.class).contains("{name:XOrder}"));
XML DSL の場合
<predicateValidator Type="csv:CSVOrder"> <simple>${body} contains 'name:XOrder'</simple> </predicateValidator>
10.7.5. エンドポイントバリデーターのオプション
名前 | 説明 |
---|---|
ref | エンドポイント ID への参照。 |
uri | エンドポイント URI |
Java DSL でエンドポイント URI を指定する例:
validator() .type("xml") .withUri("validator:xsd/schema.xsd");
XML DSL でエンドポイント ref を指定する例:
<validators> <endpointValidator uri="validator:xsd/schema.xsd" type="xml"/> </validators>
エンドポイントバリデーターはメッセージを指定されたエンドポイントに転送します。上記の例では、Camel はメッセージを Validation Component である validator:
エンドポイントに転送します。Bean Validation Component などの異なる検証コンポーネントを使用することもできます。
10.7.6. カスタムバリデーターのオプション
Validator は org.apache.camel.spi.Validator
のサブクラスである必要があります。
名前 | 説明 |
---|---|
ref | カスタムバリデーター Bean ID への参照。 |
className | カスタムバリデータークラスの完全修飾クラス名。 |
カスタムバリデータークラスを指定する例:
Java DSL の場合
validator() .type("json") .withJava(com.example.MyCustomValidator.class);
XML DSL の場合
<validators> <customValidator className="com.example.MyCustomValidator" type="json"/> </validators>
10.7.7. バリデーターの例
この例は 2 つの部分があり、最初の部分はメッセージを検証するエンドポイントバリデーターを宣言します。2 番目の部分は、バリデーターをルートに適用する方法を示します。
10.7.7.1. 最初の部分
バリデーターコンポーネントを使用して、xml:ABCOrder
から検証するエンドポイントバリデーターを宣言します。
Java DSL の場合
validator() .type("xml:ABCOrder") .withUri("validator:xsd/schema.xsd");
XML DSL の場合
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <validators> <endpointValidator uri="validator:xsd/schema.xsd" type="xml:ABCOrder"/> </validators> </camelContext>
10.7.7.2. 2 番目の部分
direct:abc
エンドポイントがメッセージを受信すると、上記のバリデーターが以下のルート定義に適用されます。
Java DSL では、inputType
ではなく、inputTypeWithValidate
が使用され、XML DSL では inputType 宣言の validate
属性は true
に設定されます。
Java DSL の場合
from("direct:abc") .inputTypeWithValidate("xml:ABCOrder") .log("${body}");
XML DSL の場合
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:abc"/> <inputType urn="xml:ABCOrder" validate="true"/> <log message="${body}"/> </route> </camelContext>