THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
h2. Bean Validation Component *Available as of Camel 2.3* The Validation component performs bean validation of the message body using the Java Bean Validation API ([JSR 303|http://jcp.org/en/jsr/detail?id=303]). Camel uses the reference implementation, which is [Hibernate Validator|http://docs.jboss.org/hibernate/stable/validator/reference/en/html_single/]. Maven users will need to add the following dependency to their {{pom.xml}} for this component: {code:xml} <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-bean-validator</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency> {code} h3. URI format {code} bean-validator:something[?options] {code} or {code} bean-validator://something[?options] {code} Where *something* must be present to provide a valid url You can append query options to the URI in the following format, ?option=value&option=value&... h3. URI Options {div:class=confluenceTableSmall} || Option || Default || Description || | {{group}} | {{javax.validation.groups.Default}} | The custom validation group to use. | | {{messageInterpolator}} | {{org.hibernate.validator.engine.\\ResourceBundleMessageInterpolator}} | Reference to a custom {{javax.validation.MessageInterpolator}} in the [Registry]. | | {{traversableResolver}} | {{org.hibernate.validator.engine.resolver.\\DefaultTraversableResolver}} | Reference to a custom {{javax.validation.TraversableResolver}} in the [Registry]. | | {{constraintValidatorFactory}} | {{org.hibernate.validator.engine.\\ConstraintValidatorFactoryImpl}} | Reference to a custom {{javax.validation.ConstraintValidatorFactory}} in the [Registry]. | {div} h3. Example Assumed we have a java bean with the following annotations {code:title=Car.java} public class Car { @NotNull private String manufacturer; @NotNull @Size(min = 5, max = 14, groups = OptionalChecks.class) private String licensePlate; // getter and setter } {code} and an interface definition for our custom validation group {code:title=OptionalChecks.java} public interface OptionalChecks { } {code} with the following Camel route, only the *@NotNull* constraints on the attributes manufacturer and licensePlate will be validated (Camel uses the default group {{javax.validation.groups.Default}}). {code} from("direct:start") .to("bean-validator://x") .to("mock:end") {code} If you want to check the constraints from the group {{OptionalChecks}}, you have to define the route like this {code} from("direct:start") .to("bean-validator://x?group=OptionalChecks") .to("mock:end") {code} If you want to check the constraints from both groups, you have to define a new interface first {code:title=AllChecks.java} @GroupSequence({Default.class, OptionalChecks.class}) public interface AllChecks { } {code} and then your route definition should looks like this {code} from("direct:start") .to("bean-validator://x?group=AllChecks") .to("mock:end") {code} And if you have to provide your own message interpolator, traversable resolver and constraint validator factory, you have to write a route like this {code} <bean id="myMessageInterpolator" class="my.ConstraintValidatorFactory" /> <bean id="myTraversableResolver" class="my.TraversableResolver" /> <bean id="myConstraintValidatorFactory" class="my.ConstraintValidatorFactory" /> from("direct:start") .to("bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator&traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory") .to("mock:end") {code} It's also possible to describe your constraints as XML and not as Java annotations. In this case, you have to provide the file {{META-INF/validation.xml}} which could looks like this {code:title=validation.xml} <?xml version="1.0" encoding="UTF-8"?> <validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"> <default-provider>org.hibernate.validator.HibernateValidator</default-provider> <message-interpolator>org.hibernate.validator.engine.ResourceBundleMessageInterpolator</message-interpolator> <traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver> <constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory> <constraint-mapping>/constraints-car.xml</constraint-mapping> </validation-config> {code} and the {{constraints-car.xml}} file {code:title=constraints-car.xml} <?xml version="1.0" encoding="UTF-8"?> <constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd" xmlns="http://jboss.org/xml/ns/javax/validation/mapping"> <default-package>org.apache.camel.component.bean.validator</default-package> <bean class="CarWithoutAnnotations" ignore-annotations="true"> <field name="manufacturer"> <constraint annotation="javax.validation.constraints.NotNull" /> </field> <field name="licensePlate"> <constraint annotation="javax.validation.constraints.NotNull" /> <constraint annotation="javax.validation.constraints.Size"> <groups> <value>org.apache.camel.component.bean.validator.OptionalChecks</value> </groups> <element name="min">5</element> <element name="max">14</element> </constraint> </field> </bean> </constraint-mappings> {code} {include:Endpoint See Also} |