---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: validator
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: validator
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: validator
        spec:
          containers:
          - image: funktion/connector-validator:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: validator
      syntax: validator:resourceUri
      title: Validator
      description: Validates the payload of a message using XML Schema and JAXP Validation.
      label: core,validation
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.validator.ValidatorComponent
      groupId: org.apache.camel
      artifactId: camel-core
      version: 2.18.3
    componentProperties:
      resourceResolverFactory:
        kind: property
        label: advanced
        required: false
        type: object
        javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
        deprecated: false
        secret: false
        description: To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
        order: 0
    properties:
      resourceUri:
        kind: path
        group: producer
        required: true
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: URL to a local resource on the classpathor 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.
        order: 0
      failOnNullBody:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Whether to fail if no body exists.
        order: 1
      failOnNullHeader:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Whether to fail if no header exists when validating against a header.
        order: 2
      headerName:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: To validate against a header instead of the message body.
        order: 3
      errorHandler:
        kind: parameter
        group: advanced
        label: advanced
        type: object
        javaType: org.apache.camel.processor.validation.ValidatorErrorHandler
        deprecated: false
        secret: false
        description: To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
        order: 4
      resourceResolver:
        kind: parameter
        group: advanced
        label: advanced
        type: object
        javaType: org.w3c.dom.ls.LSResourceResolver
        deprecated: false
        secret: false
        description: To use a custom LSResourceResolver. See also link setResourceResolverFactory(ValidatorResourceResolverFactory)
        order: 5
      resourceResolverFactory:
        kind: parameter
        group: advanced
        label: advanced
        type: object
        javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
        deprecated: false
        secret: false
        description: For creating a resource resolver which depends on the endpoint resource URI. Must not be used in combination with method link setResourceResolver(LSResourceResolver). If not set then DefaultValidatorResourceResolverFactory is used
        order: 6
      schemaFactory:
        kind: parameter
        group: advanced
        label: advanced
        type: object
        javaType: javax.xml.validation.SchemaFactory
        deprecated: false
        secret: false
        description: To use a custom javax.xml.validation.SchemaFactory
        order: 7
      schemaLanguage:
        kind: parameter
        group: advanced
        label: advanced
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        defaultValue: http://www.w3.org/2001/XMLSchema
        description: Configures the W3C XML Schema Namespace URI.
        order: 8
      synchronous:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        order: 9
      useDom:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
        order: 10
      useSharedSchema:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: 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.
        order: 11
  documentation.adoc: |+
    [[Validation-ValidationComponent]]
    Validation Component
    ~~~~~~~~~~~~~~~~~~~~

    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 link:jing.html[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 link:msv.html[MSV] component also supports
    http://relaxng.org/[RelaxNG XML Syntax].

    [[Validation-URIformat]]
    URI format
    ^^^^^^^^^^

    [source,java]
    -----------------------------------
    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 link:validation.html[Validation] component is
    provided directly in the camel-core.

    [[Validation-Options]]
    Options
    ^^^^^^^

    // component options: START
    The Validator component supports 1 options which are listed below.



    {% raw %}
    [width="100%",cols="2,1m,7",options="header"]
    |=======================================================================
    | Name | Java Type | Description
    | resourceResolverFactory | ValidatorResourceResolverFactory | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
    |=======================================================================
    {% endraw %}
    // component options: END


    // endpoint options: START
    The Validator component supports 12 endpoint options which are listed below:

    {% raw %}
    [width="100%",cols="2,1,1m,1m,5",options="header"]
    |=======================================================================
    | Name | Group | Default | Java Type | Description
    | resourceUri | producer |  | String | *Required* URL to a local resource on the classpathor 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.
    | failOnNullBody | producer | true | boolean | Whether to fail if no body exists.
    | failOnNullHeader | producer | true | boolean | Whether to fail if no header exists when validating against a header.
    | headerName | producer |  | String | To validate against a header instead of the message body.
    | errorHandler | advanced |  | ValidatorErrorHandler | To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
    | resourceResolver | advanced |  | LSResourceResolver | To use a custom LSResourceResolver. See also link setResourceResolverFactory(ValidatorResourceResolverFactory)
    | resourceResolverFactory | advanced |  | ValidatorResourceResolverFactory | For creating a resource resolver which depends on the endpoint resource URI. Must not be used in combination with method link setResourceResolver(LSResourceResolver). If not set then DefaultValidatorResourceResolverFactory is used
    | schemaFactory | advanced |  | SchemaFactory | To use a custom javax.xml.validation.SchemaFactory
    | schemaLanguage | advanced | http://www.w3.org/2001/XMLSchema | String | Configures the W3C XML Schema Namespace URI.
    | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    | useDom | advanced | false | boolean | Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
    | useSharedSchema | advanced | true | boolean | 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.
    |=======================================================================
    {% endraw %}
    // endpoint options: END


    [[Validation-Example]]
    Example
    ^^^^^^^

    The following
    http://svn.apache.org/repos/asf/camel/trunk/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).

    [[Validation-Advanced:JMXmethodclearCachedSchema]]
    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`.`

    [[Validation-SeeAlso]]
    See Also
    ^^^^^^^^

    * link:configuring-camel.html[Configuring Camel]
    * link:component.html[Component]
    * link:endpoint.html[Endpoint]
    * link:getting-started.html[Getting Started]

