blob: d27307874f8ca9e7b3e8c8b707315bc63f3f678c [file] [log] [blame]
[[validator-component]]
== Validator Component
*Available as of Camel version 1.1*
The Validation component performs XML validation of the message body
using the JAXP Validation API and based on any of the supported XML
schema languages, which defaults to http://www.w3.org/XML/Schema[XML
Schema]
Note that the <<jing-component,Jing>> component also supports the following
useful schema languages:
* http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
Syntax]
* http://relaxng.org/[RelaxNG XML Syntax]
The <<msv-component,MSV>> component also supports
http://relaxng.org/[RelaxNG XML Syntax].
=== URI format
[source]
----
validator:someLocalOrRemoteResource
----
Where *someLocalOrRemoteResource* is some URL to a local resource on the
classpath or a full URL to a remote resource or resource on the file
system which contains the XSD to validate against. For example:
* `msv:org/foo/bar.xsd`
* `msv:file:../foo/bar.xsd`
* `msv:http://acme.com/cheese.xsd`
* `validator:com/mypackage/myschema.xsd`
Maven users will need to add the following dependency to their `pom.xml`
for this component when using *Camel 2.8* or older:
[source,xml]
----
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
----
From Camel 2.9 onwards the Validation component is
provided directly in the camel-core.
=== Options
// component options: START
The Validator component supports 2 options, which are listed below.
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resourceResolverFactory* (advanced) | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI | | ValidatorResource ResolverFactory
| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
|===
// component options: END
// endpoint options: START
The Validator endpoint is configured using URI syntax:
----
validator:resourceUri
----
with the following path and query parameters:
==== Path Parameters (1 parameters):
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resourceUri* | *Required* URL to a local resource on the classpath,or a reference to lookup a bean in the Registry, or a full URL to a remote resource or resource on the file system which contains the XSD to validate against. | | String
|===
==== Query Parameters (10 parameters):
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *failOnNullBody* (producer) | Whether to fail if no body exists. | true | boolean
| *failOnNullHeader* (producer) | Whether to fail if no header exists when validating against a header. | true | boolean
| *headerName* (producer) | To validate against a header instead of the message body. | | String
| *errorHandler* (advanced) | To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception. | | ValidatorErrorHandler
| *resourceResolver* (advanced) | To use a custom LSResourceResolver. See also setResourceResolverFactory(ValidatorResourceResolverFactory) | | LSResourceResolver
| *resourceResolverFactory* (advanced) | For creating a resource resolver which depends on the endpoint resource URI. Must not be used in combination with method setResourceResolver(LSResourceResolver). If not set then DefaultValidatorResourceResolverFactory is used | | ValidatorResource ResolverFactory
| *schemaFactory* (advanced) | To use a custom javax.xml.validation.SchemaFactory | | SchemaFactory
| *schemaLanguage* (advanced) | Configures the W3C XML Schema Namespace URI. | http://www.w3.org/2001/XMLSchema | String
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *useSharedSchema* (advanced) | Whether the Schema instance should be shared or not. This option is introduced to work around a JDK 1.6.x bug. Xerces should not have this issue. | true | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
=== Spring Boot Auto-Configuration
The component supports 3 options, which are listed below.
[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.validator.enabled* | Whether to enable auto configuration of the validator component. This is enabled by default. | | Boolean
| *camel.component.validator.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
| *camel.component.validator.resource-resolver-factory* | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI. The option is a org.apache.camel.component.validator.ValidatorResourceResolverFactory type. | | String
|===
// spring-boot-auto-configure options: END
=== Example
The following
https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/component/validator/camelContext.xml[example]
shows how to configure a route from endpoint *direct:start* which then
goes to one of two endpoints, either *mock:valid* or *mock:invalid*
based on whether or not the XML matches the given schema (which is
supplied on the classpath).
=== Advanced: JMX method clearCachedSchema
Since *Camel 2.17*, you can force that the cached schema in the
validator endpoint is cleared and reread with the next process call with
the JMX operation `clearCachedSchema. `You can also use this method to
programmatically clear the cache. This method is available on the
`ValidatorEndpoint `class`.`