blob: 2aff00c70986a4a48e725d3dc33369c5865665b6 [file] [log] [blame]
[[Validator-Validator]]
= Validator
*Since Camel 2.19*
Validator performs declarative validation of the message according to the declared
`Input Type` and/or `Output Type` on a route definition which declares the expected
message type. Note that the validation is performed only if `validate` attribute on the
type declaration is true.
If `validate` attribute is true on a `Input Type` and/or `Output Type` declaration,
camel internal processor looks for a corresponding Validator from the registry and apply.
[[Validator-DataTypeFormat]]
== Data type format
[source]
----
scheme:name
----
where *scheme* is the type of data model like `java`, `xml` or `json`, and *name* is the individual
data type name.
[[Validator-SupportedValidators]]
== Supported Validators
|===
| Validator | Description
| Predicate Validator | Validate with using Expression or Predicate
| Endpoint Validator | Validate by forwarding to the Endpoint to be used with validation component such as Validation Component or Bean Validation Component.
| Custom Validator | Validate with using custom validator class. Validator must be a subclass of `org.apache.camel.spi.Validator`
|===
[[Validator-CommonOptions]]
== Common Options
All validators have following common options to specify which data type is supported by the validator.
`type` must be specified.
|===
| Name | Description
| type | xref:validator.adoc#Validator-DataTypeFormat[Data type] to validate.
|===
[[Validator-Predicate]]
== Predicate Validator Options
|===
| Name | Description
| expression | Expression or Predicate to be used for validation
|===
Here is an example to specify a validation predicate:
Java DSL:
[source,java]
----
validator()
.type("csv:CSVOrder")
.withExpression(bodyAs(String.class).contains("{name:XOrder}"));
----
XML DSL:
[source,xml]
----
<predicateValidator Type="csv:CSVOrder">
<simple>${body} contains '{name:XOrder}'</simple>
</predicateValidator>
----
[[Validator-Endpoint]]
== Endpoint Validator Options
|===
| Name | Description
| ref | Reference to the Endpoint ID
| uri | Endpoint URI
|===
Here is an example to specify endpoint URI in Java DSL:
[source,java]
----
validator()
.type("xml")
.withUri("validator:xsd/schema.xsd");
----
And here is an example to specify endpoint ref in XML DSL:
[source,xml]
----
<endpointValidator uri="validator:xsd/schema.xsd" type="xml"/>
----
Note that the Endpoint Validator just forwards the message to the specified endpoint. In above example,
camel forwards the message to the `validator:` endpoint, which actually is a
xref:components::validator-component.adoc[Validation Component]. You can also use any other validation component like
Bean Validation Component.
[[Validator-Custom]]
== Custom Validator Options
Note that Validator must be a subclass of `org.apache.camel.spi.Validator`
|===
| Name | Description
| ref | Reference to the custom Validator bean ID
| className | Fully qualified class name of the custom Validator class
|===
Here is an example to specify custom Validator class:
Java DSL:
[source,java]
----
validator()
.type("json")
.withJava(com.example.MyCustomValidator.class);
----
XML DSL:
[source,xml]
----
<customTransformer className="com.example.MyCustomValidator" type="json"/>
----
[[Validator-Examples]]
== Examples
For example to declare the Endpoint Validator which uses
validator component to validate `xml:ABCOrder`, we can do as follows:
Java DSL:
[source,java]
----
validator()
.type("xml:ABCOrder")
.withUri("validator:xsd/schema.xsd");
----
XML DSL:
[source,xml]
----
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<validators>
<endpointValidator uri="validator:xsd/schema.xsd" type="xml:ABCOrder"/>
</validators>
</camelContext>
----
If you have following route definition, above validator will be applied when `direct:abc` endpoint
receives the message. Note that `inputTypeWithValidate` is used instead of `inputType` in Java DSL,
and the `validate` attribute on the inputType declaration is set to `true` in XML DSL:
Java DSL:
[source,java]
----
from("direct:abc")
.inputTypeWithValidate("xml:ABCOrder")
.log("${body}");
----
XML DSL:
[source,xml]
----
<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>
----