第12章 Bean バリデーター
Bean バリデーターコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel 2.3 で利用可能
バリデーターコンポーネントは、Java Bean Validation API (JSR 303) を使用してメッセージボディーの Bean 検証を実行します。Camel は Hibernate Validator のリファレンス実装を使用します。
Maven ユーザーは、このコンポーネントの
pom.xml に以下の依存関係を追加する必要があります。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
bean-validator:label[?options]
bean-validator:label[?options]
または
bean-validator://label[?options]
bean-validator://label[?options]
label は、エンドポイントを記述する任意のテキスト値です。以下の形式で URI にクエリーオプションを追加できます。 ?option=value&option=value&...
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の URI オプションがサポートされています。
| オプション | デフォルト | 説明 |
|---|---|---|
group
|
javax.validation.groups.Default
|
使用するカスタム検証グループ。 |
messageInterpolator
|
org.hibernate.validator.engine.ResourceBundleMessageInterpolator
|
レジストリーのカスタム javax.validation.MessageInterpolator への参照。
|
traversableResolver
|
org.hibernate.validator.engine.resolver.DefaultTraversableResolver
|
レジストリーのカスタム javax.validation.TraversableResolver への参照。
|
constraintValidatorFactory
|
org.hibernate.validator.engine.ConstraintValidatorFactoryImpl
|
レジストリーのカスタム javax.validation.ConstraintValidatorFactory への参照。
|
OSGi デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
OSGi 環境で Hibernate Validator を使用するには、
org.apache.camel.component.bean.validator.HibernateValidationProviderResolver と同じように、専用の ValidationProviderResolver 実装を使用します。以下のスニペットは、このアプローチを示しています。Camel 2.13.0 から HibernateValidationProviderResolver を使用できることに注意してください。
例12.1 Using HibernateValidationProviderResolver
カスタム
ValidationProviderResolver が定義されておらず、バリデーターコンポーネントが OSGi 環境にデプロイされている場合、HibernateValidationProviderResolver は自動的に使用されます。
例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のアノテーションを持つ Java Bean があると仮定します。
Car.java
カスタムバリデーショングループのインターフェイス定義:
OptionalChecks.java
public interface OptionalChecks {
}
public interface OptionalChecks {
}
以下の Apache Camel ルートでは、製造元および licensePlate 属性の @NotNull 制約のみが検証されます(Apache Camel はデフォルトのグループ
javax.validation.groups.Defaultを使用します)。
from("direct:start")
.to("bean-validator://x")
.to("mock:end")
from("direct:start")
.to("bean-validator://x")
.to("mock:end")
OptionalChecks グループからの制約を確認する場合は、以下のようなルートを定義する必要があります。
from("direct:start")
.to("bean-validator://x?group=OptionalChecks")
.to("mock:end")
from("direct:start")
.to("bean-validator://x?group=OptionalChecks")
.to("mock:end")
両方のグループからの制約を確認する場合は、最初に新しいインターフェイスを定義する必要があります。
AllChecks.java
@GroupSequence({Default.class, OptionalChecks.class})
public interface AllChecks {
}
@GroupSequence({Default.class, OptionalChecks.class})
public interface AllChecks {
}
ルート定義は以下のようになります。
from("direct:start")
.to("bean-validator://x?group=AllChecks")
.to("mock:end")
from("direct:start")
.to("bean-validator://x?group=AllChecks")
.to("mock:end")
また、独自のメッセージインターポレーター、通過可能なリゾルバー、および制約バリデーターファクトリーを提供する必要がある場合は、次のようなルートを記述する必要があります。
制約は、Java アノテーションではなく XML として記述することもできます。この場合、次のようなファイル
META-INF/validation.xml を提供する必要があります。
validation.xml
constraints-car.xml ファイル
constraints-car.xml