<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.entaxy.ru/schemas/1.0" xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:blueprint="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://www.entaxy.ru/schemas/entaxy-mediators/1.0" targetNamespace="http://www.entaxy.ru/schemas/1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://camel.apache.org/schema/blueprint" schemaLocation="camel-entaxy.xsd"/>
	<xs:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0" schemaLocation="blueprint-entaxy.xsd"/>
	<xs:import namespace="http://www.entaxy.ru/schemas/entaxy-mediators/1.0" schemaLocation="entaxy-mediators.xsd"/>
	<xs:complexType name="TEntaxyAbstractRoute">
		<xs:complexContent>
			<xs:extension base="camel:output">
				<xs:sequence>
					<xs:element ref="camel:from" minOccurs="0"/>
					<xs:element ref="camel:inputType" minOccurs="0"/>
					<xs:element ref="camel:outputType" minOccurs="0"/>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element ref="camel:onException"/>
						<xs:element ref="camel:when"/>
						<xs:element ref="camel:onCompletion"/>
						<xs:element ref="camel:intercept"/>
						<xs:element ref="camel:interceptFrom"/>
						<xs:element ref="camel:interceptSendToEndpoint"/>
						<xs:element ref="camel:to"/>
						<xs:element ref="camel:toD"/>
						<xs:element ref="camel:route"/>
						<xs:element ref="camel:aggregate"/>
						<xs:element ref="camel:bean"/>
						<xs:element ref="camel:doCatch"/>
						<xs:element ref="camel:choice"/>
						<xs:element ref="camel:otherwise"/>
						<xs:element ref="camel:circuitBreaker"/>
						<xs:element ref="camel:claimCheck"/>
						<xs:element ref="camel:convertBodyTo"/>
						<xs:element ref="camel:delay"/>
						<xs:element ref="camel:dynamicRouter"/>
						<xs:element ref="camel:enrich"/>
						<xs:element ref="camel:filter"/>
						<xs:element ref="camel:doFinally"/>
						<xs:element ref="camel:idempotentConsumer"/>
						<xs:element ref="camel:inOnly"/>
						<xs:element ref="camel:inOut"/>
						<xs:element ref="camel:loadBalance"/>
						<xs:element ref="camel:log"/>
						<xs:element ref="camel:loop"/>
						<xs:element ref="camel:marshal"/>
						<xs:element ref="camel:multicast"/>
						<xs:element ref="camel:onFallback"/>
						<xs:element ref="camel:pipeline"/>
						<xs:element ref="camel:policy"/>
						<xs:element ref="camel:pollEnrich"/>
						<xs:element ref="camel:process"/>
						<xs:element ref="camel:recipientList"/>
						<xs:element ref="camel:removeHeader"/>
						<xs:element ref="camel:removeHeaders"/>
						<xs:element ref="camel:removeProperties"/>
						<xs:element ref="camel:removeProperty"/>
						<xs:element ref="camel:resequence"/>
						<xs:element ref="camel:rollback"/>
						<xs:element ref="camel:routingSlip"/>
						<xs:element ref="camel:saga"/>
						<xs:element ref="camel:sample"/>
						<xs:element ref="camel:script"/>
						<xs:element ref="camel:setBody"/>
						<xs:element ref="camel:setExchangePattern"/>
						<xs:element ref="camel:setHeader"/>
						<xs:element ref="camel:setProperty"/>
						<xs:element ref="camel:sort"/>
						<xs:element ref="camel:split"/>
						<xs:element ref="camel:step"/>
						<xs:element ref="camel:stop"/>
						<xs:element ref="camel:threads"/>
						<xs:element ref="camel:throttle"/>
						<xs:element ref="camel:throwException"/>
						<xs:element ref="camel:transacted"/>
						<xs:element ref="camel:transform"/>
						<xs:element ref="camel:doTry"/>
						<xs:element ref="camel:unmarshal"/>
						<xs:element ref="camel:validate"/>
						<xs:element ref="camel:whenSkipSendToEndpoint"/>
						<xs:element ref="camel:wireTap"/>
						<xs:element ref="camel:serviceCall"/>
						<xs:element ref="blueprint:bean"/>
						<xs:element ref="blueprint:reference"/>
						<xs:any namespace="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"/>
					</xs:choice>
					<xs:element name="routeProperty" type="camel:propertyDefinition" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="autoStartup" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether to auto start this route. Default value: true
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="delayer" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether to slow down processing messages by a given delay in msec.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="errorHandlerRef" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Sets the bean ref name of the error handler builder to use on this route.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="group" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
The group that this route belongs to; could be the name of the RouteBuilder
class or be explicitly configured in the XML. May be null.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="logMask" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether security mask for Logging is enabled on this route. Default value: false
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="messageHistory" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether message history is enabled on this route. Default value: true
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="rest" type="xs:boolean"/>
				<xs:attribute name="routePolicyRef" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Reference to custom org.apache.camel.spi.RoutePolicy to use by the route.
Multiple policies can be configured by separating values using comma.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="shutdownRoute" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
To control how to shutdown the route.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="shutdownRunningTask" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
To control how to shutdown the route.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="startupOrder" type="xs:int">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
To configure the ordering of the routes being started.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="streamCache" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether stream caching is enabled on this route.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="trace" type="xs:string">
					<xs:annotation>
						<xs:documentation xml:lang="en"><![CDATA[
Whether tracing is enabled on this route.
            ]]></xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TEntaxyPredefinedRoute">
		<xs:complexContent>
			<xs:restriction base="TEntaxyAbstractRoute">
				<xs:sequence>
					<xs:sequence>
						<xs:element ref="camel:description" minOccurs="0"/>
					</xs:sequence>
					<xs:sequence/>
					<xs:sequence/>
					<xs:sequence>
						<xs:element ref="camel:from" minOccurs="0" maxOccurs="0"/>
						<xs:element ref="camel:inputType" minOccurs="0"/>
						<xs:element ref="camel:outputType" minOccurs="0"/>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="camel:onException"/>
							<xs:element ref="camel:when"/>
							<xs:element ref="camel:onCompletion"/>
							<xs:element ref="camel:intercept"/>
							<xs:element ref="camel:interceptFrom"/>
							<xs:element ref="camel:interceptSendToEndpoint"/>
							<xs:element ref="camel:to"/>
							<xs:element ref="camel:toD"/>
							<xs:element ref="camel:route"/>
							<xs:element ref="camel:aggregate"/>
							<xs:element ref="camel:bean"/>
							<xs:element ref="camel:doCatch"/>
							<xs:element ref="camel:choice"/>
							<xs:element ref="camel:otherwise"/>
							<xs:element ref="camel:circuitBreaker"/>
							<xs:element ref="camel:claimCheck"/>
							<xs:element ref="camel:convertBodyTo"/>
							<xs:element ref="camel:delay"/>
							<xs:element ref="camel:dynamicRouter"/>
							<xs:element ref="camel:enrich"/>
							<xs:element ref="camel:filter"/>
							<xs:element ref="camel:doFinally"/>
							<xs:element ref="camel:idempotentConsumer"/>
							<xs:element ref="camel:inOnly"/>
							<xs:element ref="camel:inOut"/>
							<xs:element ref="camel:loadBalance"/>
							<xs:element ref="camel:log"/>
							<xs:element ref="camel:loop"/>
							<xs:element ref="camel:marshal"/>
							<xs:element ref="camel:multicast"/>
							<xs:element ref="camel:onFallback"/>
							<xs:element ref="camel:pipeline"/>
							<xs:element ref="camel:policy"/>
							<xs:element ref="camel:pollEnrich"/>
							<xs:element ref="camel:process"/>
							<xs:element ref="camel:recipientList"/>
							<xs:element ref="camel:removeHeader"/>
							<xs:element ref="camel:removeHeaders"/>
							<xs:element ref="camel:removeProperties"/>
							<xs:element ref="camel:removeProperty"/>
							<xs:element ref="camel:resequence"/>
							<xs:element ref="camel:rollback"/>
							<xs:element ref="camel:routingSlip"/>
							<xs:element ref="camel:saga"/>
							<xs:element ref="camel:sample"/>
							<xs:element ref="camel:script"/>
							<xs:element ref="camel:setBody"/>
							<xs:element ref="camel:setExchangePattern"/>
							<xs:element ref="camel:setHeader"/>
							<xs:element ref="camel:setProperty"/>
							<xs:element ref="camel:sort"/>
							<xs:element ref="camel:split"/>
							<xs:element ref="camel:step"/>
							<xs:element ref="camel:stop"/>
							<xs:element ref="camel:threads"/>
							<xs:element ref="camel:throttle"/>
							<xs:element ref="camel:throwException"/>
							<xs:element ref="camel:transacted"/>
							<xs:element ref="camel:transform"/>
							<xs:element ref="camel:doTry"/>
							<xs:element ref="camel:unmarshal"/>
							<xs:element ref="camel:validate"/>
							<xs:element ref="camel:whenSkipSendToEndpoint"/>
							<xs:element ref="camel:wireTap"/>
							<xs:element ref="camel:serviceCall"/>
							<xs:element ref="blueprint:bean"/>
							<xs:element ref="blueprint:reference"/>
							<xs:any namespace="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"/>
						</xs:choice>
						<xs:element name="routeProperty" type="camel:propertyDefinition" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TEntaxyPredefinedInputRoute">
		<xs:complexContent>
			<xs:restriction base="TEntaxyAbstractRoute">
				<xs:sequence>
					<xs:sequence>
						<xs:element ref="camel:description" minOccurs="0"/>
					</xs:sequence>
					<xs:sequence/>
					<xs:sequence/>
					<xs:sequence>
						<xs:element ref="camel:from" minOccurs="1" maxOccurs="1"/>
						<xs:element ref="camel:inputType" minOccurs="0"/>
						<xs:element ref="camel:outputType" minOccurs="0"/>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="camel:onException"/>
							<xs:element ref="camel:when"/>
							<xs:element ref="camel:onCompletion"/>
							<xs:element ref="camel:intercept"/>
							<xs:element ref="camel:interceptFrom"/>
							<xs:element ref="camel:interceptSendToEndpoint"/>
							<xs:element ref="camel:to"/>
							<xs:element ref="camel:toD"/>
							<xs:element ref="camel:route"/>
							<xs:element ref="camel:aggregate"/>
							<xs:element ref="camel:bean"/>
							<xs:element ref="camel:doCatch"/>
							<xs:element ref="camel:choice"/>
							<xs:element ref="camel:otherwise"/>
							<xs:element ref="camel:circuitBreaker"/>
							<xs:element ref="camel:claimCheck"/>
							<xs:element ref="camel:convertBodyTo"/>
							<xs:element ref="camel:delay"/>
							<xs:element ref="camel:dynamicRouter"/>
							<xs:element ref="camel:enrich"/>
							<xs:element ref="camel:filter"/>
							<xs:element ref="camel:doFinally"/>
							<xs:element ref="camel:idempotentConsumer"/>
							<xs:element ref="camel:inOnly"/>
							<xs:element ref="camel:inOut"/>
							<xs:element ref="camel:loadBalance"/>
							<xs:element ref="camel:log"/>
							<xs:element ref="camel:loop"/>
							<xs:element ref="camel:marshal"/>
							<xs:element ref="camel:multicast"/>
							<xs:element ref="camel:onFallback"/>
							<xs:element ref="camel:pipeline"/>
							<xs:element ref="camel:policy"/>
							<xs:element ref="camel:pollEnrich"/>
							<xs:element ref="camel:process"/>
							<xs:element ref="camel:recipientList"/>
							<xs:element ref="camel:removeHeader"/>
							<xs:element ref="camel:removeHeaders"/>
							<xs:element ref="camel:removeProperties"/>
							<xs:element ref="camel:removeProperty"/>
							<xs:element ref="camel:resequence"/>
							<xs:element ref="camel:rollback"/>
							<xs:element ref="camel:routingSlip"/>
							<xs:element ref="camel:saga"/>
							<xs:element ref="camel:sample"/>
							<xs:element ref="camel:script"/>
							<xs:element ref="camel:setBody"/>
							<xs:element ref="camel:setExchangePattern"/>
							<xs:element ref="camel:setHeader"/>
							<xs:element ref="camel:setProperty"/>
							<xs:element ref="camel:sort"/>
							<xs:element ref="camel:split"/>
							<xs:element ref="camel:step"/>
							<xs:element ref="camel:stop"/>
							<xs:element ref="camel:threads"/>
							<xs:element ref="camel:throttle"/>
							<xs:element ref="camel:throwException"/>
							<xs:element ref="camel:transacted"/>
							<xs:element ref="camel:transform"/>
							<xs:element ref="camel:doTry"/>
							<xs:element ref="camel:unmarshal"/>
							<xs:element ref="camel:validate"/>
							<xs:element ref="camel:whenSkipSendToEndpoint"/>
							<xs:element ref="camel:wireTap"/>
							<xs:element ref="camel:serviceCall"/>
							<xs:element ref="blueprint:bean"/>
							<xs:element ref="blueprint:reference"/>
							<xs:any namespace="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"/>
						</xs:choice>
						<xs:element name="routeProperty" type="camel:propertyDefinition" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TEntaxyCamelRoute">
		<xs:complexContent>
			<xs:restriction base="TEntaxyAbstractRoute">
				<xs:sequence>
					<xs:sequence>
						<xs:element ref="camel:description" minOccurs="0"/>
					</xs:sequence>
					<xs:sequence/>
					<xs:sequence/>
					<xs:sequence>
						<xs:element ref="camel:from"/>
						<xs:element ref="camel:inputType" minOccurs="0"/>
						<xs:element ref="camel:outputType" minOccurs="0"/>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element ref="camel:onException"/>
							<xs:element ref="camel:when"/>
							<xs:element ref="camel:onCompletion"/>
							<xs:element ref="camel:intercept"/>
							<xs:element ref="camel:interceptFrom"/>
							<xs:element ref="camel:interceptSendToEndpoint"/>
							<xs:element ref="camel:to"/>
							<xs:element ref="camel:toD"/>
							<xs:element ref="camel:route"/>
							<xs:element ref="camel:aggregate"/>
							<xs:element ref="camel:bean"/>
							<xs:element ref="camel:doCatch"/>
							<xs:element ref="camel:choice"/>
							<xs:element ref="camel:otherwise"/>
							<xs:element ref="camel:circuitBreaker"/>
							<xs:element ref="camel:claimCheck"/>
							<xs:element ref="camel:convertBodyTo"/>
							<xs:element ref="camel:delay"/>
							<xs:element ref="camel:dynamicRouter"/>
							<xs:element ref="camel:enrich"/>
							<xs:element ref="camel:filter"/>
							<xs:element ref="camel:doFinally"/>
							<xs:element ref="camel:idempotentConsumer"/>
							<xs:element ref="camel:inOnly"/>
							<xs:element ref="camel:inOut"/>
							<xs:element ref="camel:loadBalance"/>
							<xs:element ref="camel:log"/>
							<xs:element ref="camel:loop"/>
							<xs:element ref="camel:marshal"/>
							<xs:element ref="camel:multicast"/>
							<xs:element ref="camel:onFallback"/>
							<xs:element ref="camel:pipeline"/>
							<xs:element ref="camel:policy"/>
							<xs:element ref="camel:pollEnrich"/>
							<xs:element ref="camel:process"/>
							<xs:element ref="camel:recipientList"/>
							<xs:element ref="camel:removeHeader"/>
							<xs:element ref="camel:removeHeaders"/>
							<xs:element ref="camel:removeProperties"/>
							<xs:element ref="camel:removeProperty"/>
							<xs:element ref="camel:resequence"/>
							<xs:element ref="camel:rollback"/>
							<xs:element ref="camel:routingSlip"/>
							<xs:element ref="camel:saga"/>
							<xs:element ref="camel:sample"/>
							<xs:element ref="camel:script"/>
							<xs:element ref="camel:setBody"/>
							<xs:element ref="camel:setExchangePattern"/>
							<xs:element ref="camel:setHeader"/>
							<xs:element ref="camel:setProperty"/>
							<xs:element ref="camel:sort"/>
							<xs:element ref="camel:split"/>
							<xs:element ref="camel:step"/>
							<xs:element ref="camel:stop"/>
							<xs:element ref="camel:threads"/>
							<xs:element ref="camel:throttle"/>
							<xs:element ref="camel:throwException"/>
							<xs:element ref="camel:transacted"/>
							<xs:element ref="camel:transform"/>
							<xs:element ref="camel:doTry"/>
							<xs:element ref="camel:unmarshal"/>
							<xs:element ref="camel:validate"/>
							<xs:element ref="camel:whenSkipSendToEndpoint"/>
							<xs:element ref="camel:wireTap"/>
							<xs:element ref="camel:serviceCall"/>
							<xs:element ref="blueprint:bean"/>
							<xs:element ref="blueprint:reference"/>
							<xs:any namespace="http://www.entaxy.ru/schemas/entaxy-mediators/1.0"/>
						</xs:choice>
						<xs:element name="routeProperty" type="camel:propertyDefinition" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TEntaxyRoutes">
		<xs:complexContent>
			<xs:extension base="camel:optionalIdentifiedDefinition">
				<xs:sequence minOccurs="0">
					<xs:choice maxOccurs="unbounded">
						<xs:element ref="camel:route"/>
						<xs:any namespace="http://www.entaxy.ru/schemas/1.0"/>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="camel-route" type="TEntaxyCamelRoute"/>
	<xs:element name="entaxy-routes" type="TEntaxyRoutes"/>
	<xs:element name="object-route" type="TEntaxyPredefinedRoute"/>
	<xs:element name="object-input-route" type="TEntaxyPredefinedInputRoute"/>
	<xs:element name="common-route" type="TEntaxyPredefinedRoute"/>
	<xs:element name="custom-route" type="TEntaxyCamelRoute"/>
	<xs:complexType name="TEntaxyChoiceDefinition">
		<xs:complexContent>
			<xs:extension base="camel:choiceDefinition"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="route-container" type="TEntaxyRoutes"/>
</xs:schema>
