10.7. バリデーター

バリデーターは、メッセージタイプを宣言するルート定義で、宣言された Input TypeOutput Type に従って、メッセージの宣言的検証を実行します。

注記

検証は、type 宣言の validate 属性が true の場合にのみ実行されます。

Input TypeOutput Type の宣言で validate 属性が true の場合、Camel 内部プロセッサーはレジストリーから対応するバリデーターを検索します。

10.7.1. データタイプフォーマット

データタイプのフォーマットは scheme:name です。scheme は、javaxml、または json といったデータモデルのタイプで、name はデータタイプ名です。

10.7.2. サポート対象のバリデーター

バリデーター説明

述語バリデーター

式または述語を使用して検証します。

エンドポイントバリデーター

Validation Component や Bean Validation Component などの検証コンポーネントと使用する Endpoint へ転送して検証します。

カスタムバリデーター

カスタムバリデータークラスを使用して検証します。Validator は org.apache.camel.spi.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>