<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springframework.org/schema/tool"
	targetNamespace="http://www.springframework.org/schema/integration" elementFormDefault="qualified"
	attributeFormDefault="unqualified">

	<xsd:import namespace="http://www.springframework.org/schema/beans" />
	<xsd:import namespace="http://www.springframework.org/schema/tool" />

	<xsd:annotation>
		<xsd:documentation><![CDATA[
	Defines the core configuration elements for Spring Integration.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="annotation-config">
		<xsd:annotation>
			<xsd:documentation>
				Enables annotation support for Message Endpoints.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="default-publisher-channel" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						Default output channel for the @Publisher annotation support.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.integration.MessageChannel" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="application-event-multicaster">
		<xsd:complexType>
			<xsd:annotation>
				<xsd:documentation>
					Defines the ApplicationEventMulticaster to use for this
					ApplicationContext.
					The "task-executor"
					reference is optional. If not provided, an
					instance of
					ThreadPoolTaskExecutor will be created by default.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:attribute name="task-executor" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	Provides reference to bean that implements org.springframework.core.task.TaskExecutor to use when dispatching Messages 
	to this channel's subscribers. Also, when using a TaskExecutor. 
	Keep in mind that any transaction active for the sender will NOT propagate to the handler invocation since the 
 	TaskExecutor dispatches to the handler on a separate Thread.
	Usually configured using 'task' namespace support provided by Spring (e.g., &lt;task:executor/&gt;)
				]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.core.task.TaskExecutor" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="channel">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Point-to-Point MessageChannel.
			</xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.integration.MessageChannel" />
				</tool:annotation>
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:sequence>
						<xsd:choice minOccurs="0" maxOccurs="1">
							<xsd:element name="queue" type="queueType">
								<xsd:annotation>
									<xsd:documentation>
										Identifies this channel as a Queue style
										channel
									</xsd:documentation>
								</xsd:annotation>
							</xsd:element>
							<xsd:element name="priority-queue" type="priorityQueueType">
								<xsd:annotation>
									<xsd:documentation>
										Identifies this channel as a Queue style
										channel where messages could be prioritized
										based on custom logic
									</xsd:documentation>
								</xsd:annotation>
							</xsd:element>
							<xsd:element name="rendezvous-queue" type="rendezvousQueueType" />
							<xsd:element name="dispatcher" type="dispatcherType" >
								<xsd:annotation>
									<xsd:documentation>Provides MessageDispatcher configuration 
									(i.e., failover, load-balancing, task-executor)</xsd:documentation>
								</xsd:annotation>
							</xsd:element>
						</xsd:choice>
						<xsd:element name="interceptors" type="channelInterceptorsType" minOccurs="0" maxOccurs="1">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
	A list of ChannelInterceptor instances whose preSend and postSend methods
	will be applied to this channel. Note that the preReceive and postReceive
	methods have no effect for a SubscribableChannel instance.
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="queueType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a queue for messages. If 'capacity' is specified, it will be a
				bounded queue.
				A custom Queue
				implementation can be injected using the 'ref'
				attribute.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="capacity" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Capacity for this queue. Default capacity is 0 which means
					this queue will accumulate as many
					messages as available resources allow.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-store" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a MessageGroupStore that can be used to buffer the messages. If a message store is
					specified then it will store messages for this channel with a correlation key equal to the
					channel name. If you need
					more control over the correlation key (e.g. two channels in the same
					application share a name), then you need to
					look to the queue implementation itself and provide an
					explicit instance via the "ref" attribute, or else maybe the
					message store has a way to specify a region or similar additional
					tag for messages. This attribute is
					mutually
					exclusive with the "ref" attribute (only one can be specified).
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.store.MessageGroupStore" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="ref" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a BlockingQueue that can be used to buffer the messages. This attribute is
					mutually
					exclusive with the "message-store" attribute (only one can be specified).
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.concurrent.BlockingQueue" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="priorityQueueType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a queue with priority-ordering for message reception.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="capacity" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Capacity for this queue. Default capacity is 0 which means
					this queue will accumulate as many
					messages as available resources allow.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="comparator" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					<![CDATA[
	Allows you to specify the reference to the bean which implements java.util.Comparator&lt;Message&lt;?&gt;&gt;
	interface and provides logic based on which Messages will be prioritized. 
					]]>
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="rendezvousQueueType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a rendezvous queue where a sender will block until the receiver
				arrives or vice-versa.
			</xsd:documentation>
		</xsd:annotation>
	</xsd:complexType>

	<xsd:complexType name="dispatcherType">
		<xsd:annotation>
			<xsd:documentation>
				Defines the dispatching configuration for a non-buffering channel
				(i.e. one without a queue).
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="load-balancer">
			<xsd:annotation>
				<xsd:documentation>
					Defines a load-balancing strategy for the channel's dispatcher.
					The default is a round-robin load
					balancer.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="round-robin">
						<xsd:annotation>
							<xsd:documentation>
								[DEFAULT] Defines a Round Robin dispatching strategy which allows
								load balancing of messages
								between multiple Message Handlers. Which
								message
								handler receives the message first is determined by the 'order'
								attribute
								of such Message Handler.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:enumeration>
					<xsd:enumeration value="none">
						<xsd:annotation>
							<xsd:documentation>
								No LoadBalancingStrategy will be used.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:enumeration>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="failover" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specifies whether this dispatcher has failover enabled. By default,
					failover will be enabled. Set
					this to 'false' to disable it.
					When enabled and message delivery to the primary Message Handler fails,
					an attempt
					will be made to deliver the message to the next handler
					and so on...
					Primary, secondary etc... is determined by the
					load-balancing strategy in
					use
					(e.g. round-robin). If no load-balancer strategy is configured, the
					order will
					be fixed
					in a sequence determined by the 'order' attribute on the
					Message Handlers
					(or the @Ordered annotation on adapted
					methods).
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="task-executor" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	Provides reference to bean that implements org.springframework.core.task.TaskExecutor to use when dispatching Messages 
	to this channel's subscribers. Also, when using a TaskExecutor. 
	Keep in mind that any transaction active for the sender will NOT propagate to the handler invocation since the 
 	TaskExecutor dispatches to the handler on a separate Thread.
	Usually configured using 'task' namespace support provided by Spring (e.g., &lt;task:executor/&gt;)
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.core.task.TaskExecutor" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="publish-subscribe-channel">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Publish-Subscribe channel that broadcasts messages to its
				subscribers.
			</xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.integration.MessageChannel" />
				</tool:annotation>
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:sequence>
						<xsd:element name="interceptors" type="channelInterceptorsType" minOccurs="0" maxOccurs="1">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
	A list of ChannelInterceptor instances whose preSend and postSend methods
	will be applied to this channel. Note that the preReceive and postReceive
	methods have no effect for a SubscribableChannel instance.
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="task-executor" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								<![CDATA[
	Provides reference to bean that implements org.springframework.core.task.TaskExecutor to use when dispatching Messages 
	to this channel's subscribers. Also, when using a TaskExecutor. 
	Keep in mind that any transaction active for the sender will NOT propagate to the handler invocation since the 
 	TaskExecutor dispatches to the handler on a separate Thread.
	Usually configured using 'task' namespace support provided by Spring (e.g., &lt;task:executor/&gt;)
								]]>
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.core.task.TaskExecutor" />
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="error-handler" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>	
						       <![CDATA[  
	Provides reference to bean that implements org.springframework.util.ErrorHandler and provides a strategy for handling errors. 
	This is especially useful for handling errors that occur during asynchronous execution 
	of tasks that have been submitted to a TaskScheduler where it may not be possible to throw the error to the original caller
								]]>
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.util.ErrorHandler" />
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="ignore-failures" type="xsd:string" default="false">
						<xsd:annotation>
							<xsd:documentation>
								Specify whether Exceptions thrown by any subscribed handler should be
								ignored (only logged).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="apply-sequence" type="xsd:string" default="false">
						<xsd:annotation>
							<xsd:documentation>
								Specify whether the sequence size, sequence number, and correlation id
								headers should be set on
								Messages that are sent through this channel.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="channelType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a message channel.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:ID" use="required" />
		<xsd:attribute name="scope" type="xsd:string" />
		<xsd:attribute name="datatype" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>	
					<![CDATA[  
	Allows you to identify this channel as Datatype channel and specify the type of the Message 
	payload this channel accepts (e.g., datatype="java.lang.String"). Datatype channel 
	is a channel that accepts messages cotaining payload of certain type.
					]]>
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dispatcher">
			<xsd:annotation>
					<xsd:documentation>
						This attribute is DEPRECATED. Please use the dispatcher sub-element
						instead.
					</xsd:documentation>
				</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="failover">
						<xsd:annotation>
							<xsd:documentation>
								Enables failover, but disables load-balancing.
								See the dispatcher sub-element for more
								information.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:enumeration>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Messaging Gateway.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="method" minOccurs="0" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation>	
							<![CDATA[  
	Provides mechanism to define method per channel mappings for this gateway
							]]>
						</xsd:documentation>
					</xsd:annotation>
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="header" minOccurs="0" maxOccurs="unbounded" type="headerSubElementType">
								<xsd:annotation>
									<xsd:documentation>	
										<![CDATA[  
				Provides mechanism to enrich content of the message with custom message headers. When this method is going to be invoked
				the generated message will be enriched with these headers. 
										]]>
									</xsd:documentation>
								</xsd:annotation>
							</xsd:element>
						</xsd:sequence>
						<xsd:attribute name="name" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
									<![CDATA[
										The name of the method
									]]>
								</xsd:documentation>
								<xsd:appinfo>
									<tool:annotation>
										<tool:expected-method type="../@service-interface" />
									</tool:annotation>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:attribute>
						<xsd:attribute name="payload-expression" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
									<![CDATA[  
										Expression that should be evaluated to generate the payload.
									]]>
								</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
						<xsd:attribute name="request-channel" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
									<![CDATA[
										Identifies channel the message will be sent to upon invocation of this method
									]]>
								</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
						<xsd:attribute name="reply-channel" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
										<![CDATA[  
								Identifies channel this gateway will subscribe to to recieve reply Message. 
								The reply Message which will then be converted to the return type of the method signature.
										]]>
								</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
						<xsd:attribute name="request-timeout" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
										<![CDATA[  
								Provides the amount of time dispatcher would wait to send a message.
								This timeout would only apply if there is a potential to block in the send call. 
								For example if this gateway is hooked up to a Queue channel. 
								Value is specified in milliseconds.
										]]>
								</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
						<xsd:attribute name="reply-timeout" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>	
										<![CDATA[  
								Allows you to specify how long this gateway will wait for the reply message 
								before throwing an exception. By default it will wait indefinitely. 
								Value is specified in milliseconds
										]]>
								</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
			<xsd:attribute name="id" type="xsd:ID" use="optional" />
			<xsd:attribute name="service-interface" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>	
						<![CDATA[  
							The name of the interface which will be exposed by this gateway. 
						]]>
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="direct">
							<tool:expected-type type="java.lang.Class" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="default-request-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>	
										<![CDATA[  
								Identifies default channel the messages will be sent to upon invocation of methods of this gateway
										]]>
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.integration.MessageChannel" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="default-reply-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>	
										<![CDATA[  
								Identifies default channel this gateway will subscribe to to recieve reply Messages, which will then be 
								converted to the return type of the method signature.
										]]>
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.integration.MessageChannel" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="error-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Identifies channel that error messages will be sent to if a failure occurs in this
						gateway's invocation. If no "error-channel" reference is provided, this gateway will
						propagate Exceptions to the caller. To completely suppress Exceptions, provide a
						reference to the "nullChannel" here.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="default-request-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>	
							<![CDATA[  
					Provides the amount of time dispatcher would wait to send a message.
					This timeout would only apply if there is a potential to block in the send call. 
					For example if this gateway is hooked up to a Queue channel. 
					Value is specified in milliseconds.
							]]>
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="default-reply-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>	
							<![CDATA[  
					Allows you to specify how long this gateway will wait for the reply message 
					before throwing an exception. By default it will wait indefinitely. 
					Value is specified in milliseconds.
							]]>
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="headerSubElementType">
		<xsd:annotation>
			<xsd:documentation>	<![CDATA[  
				Provides mechanism to enrich content of the message with custom message headers. When this method is going to be invoked
				the generated message will be enriched with these headers. 
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					The name of the header
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="value" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[  
					The value of the header. Either this or 'expression' must be provided.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[  
					Expression to be evaluated to produce a value for the header.
					Either this or 'value' must be provided.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="innerGatewayType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Messaging Gateway to be used within a chain.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="request-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>	
						<![CDATA[  
				Identifies channel the message will be sent to upon invocation of methods of this gateway
						]]>
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="request-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>	
							<![CDATA[  
					Provides the amount of time dispatcher would wait to send a message.
					This timeout would only apply if there is a potential to block in the send call. 
					For example if this gateway is hooked up to a Queue channel. 
					Value is specified in milliseconds.
							]]>
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="error-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Identifies channel that error messages will be sent to if a failure occurs in this
					adapter's invocation. To completely suppress Exceptions, provide a
					reference to the "nullChannel" here.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Channel Adapter that receives from a MessageSource and sends to a
				MessageChannel.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:choice minOccurs="0" maxOccurs="1" >
					<xsd:sequence> 
						<xsd:element name="poller" type="basePollerType" /> 
						<xsd:element ref="beans:bean" minOccurs="0" maxOccurs="1" /> 
					</xsd:sequence> 
					<xsd:sequence> 
						<xsd:element ref="beans:bean" /> 
						<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" /> 
					</xsd:sequence> 
				</xsd:choice>
				<xsd:element name="header" type="headerSubElementType" minOccurs="0" maxOccurs="unbounded" />
			</xsd:sequence>
			<xsd:attributeGroup ref="methodInvokingOrExpressionEvaluatingAttributes" />
			<xsd:attributeGroup ref="channelAdapterAttributes" />
			<xsd:attribute name="send-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
		Maximum amount of time in milliseconds to wait when sending a message to the channel if such channel may block.
		For example, a Queue Channel can block until space is available if its maximum capacity has been reached.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Channel Adapter that receives from a MessageChannel and passes to
				a method-invoking
				MessageHandler.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="methodInvokingChannelAdapterType">
					<xsd:attribute name="order">
						<xsd:annotation>
							<xsd:documentation>
								Specifies the order for invocation when this endpoint is connected as a
subscriber to a channel. This is particularly relevant when that channel
is using a "failover" dispatching strategy. It has no effect when this
endpoint itself is a Polling Consumer for a channel with a queue.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="logging-channel-adapter">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelAdapterType">
					<xsd:attribute name="level" default="INFO">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Specify the log level.
							]]></xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="FATAL" />
								<xsd:enumeration value="ERROR" />
								<xsd:enumeration value="WARN" />
								<xsd:enumeration value="INFO" />
								<xsd:enumeration value="DEBUG" />
								<xsd:enumeration value="TRACE" />
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="expression">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Provide a SpEL expression to be evaluated against the Message as the root object. For example,
	the default behavior is equivalent to an expression of "payload", or an expression may evaluate
	against the payload itself ("payload.address.city") or headers ("headers.foo"). This attribute and
	the 'log-full-message' attribute are mutually exclusive. See the documentation on the
	'log-full-message' attribute for more information.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="log-full-message">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Specify whether to log the full message. This attribute and the 'expression' attribute are
	mutually exclusive. Setting this to true is equivalent to setting an expression value of "#root"
	since the Message is the root object against which the expression will be evaluated. If no
	'expression' is provided, and this value is false (the default), only the payload will be logged.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:attributeGroup name="methodInvokingOrExpressionEvaluatingAttributes">
		<xsd:attribute name="ref" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.lang.Object" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
				A reference to a bean defined in the application context. 
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-method type-ref="@ref" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
					A method defined on the bean referenced by 'ref' attribute
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					SpEL expression to be evaluated for each triggered execution.
					The result of the evaluation will be
					passed as the payload of
					the Message that is sent to the MessageChannel.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="channelAdapterAttributes">
		<xsd:attribute name="id" type="xsd:ID" />
		<xsd:attribute name="channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
					Identifies channel attached to this adapter. Depending on the type of the adapter 
					this channel could be the receiving channel (e.g., outbound-channel-adapter) or channel where 
					messages will be sent to by this adapter (e.g., inbound-channel-adapter).
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="auto-startup" type="xsd:string" default="true">
			<xsd:annotation>
				<xsd:documentation>
					Lifecycle attribute signaling if this component should be started during Application Context startup.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:complexType name="methodInvokingChannelAdapterType">
		<xsd:complexContent>
			<xsd:extension base="channelAdapterType">
				<xsd:attributeGroup ref="methodInvokingOrExpressionEvaluatingAttributes" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="channelAdapterType">
		<xsd:all>
			<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
			<xsd:element ref="beans:bean" minOccurs="0" maxOccurs="1" />
		</xsd:all>
		<xsd:attributeGroup ref="channelAdapterAttributes" />
	</xsd:complexType>

	<xsd:element name="service-activator">
		<xsd:annotation>
			<xsd:documentation>
				Defines an endpoint for exposing any bean reference as a service that
				receives request Messages
				from an 'input-channel' and may send reply
				Messages to an 'output-channel'. The 'ref' may point to an instance
				that
				has either a single public method or a method with the
				@ServiceActivator annotation. Otherwise, the 'method'
				attribute
				should be provided along with 'ref'.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="expressionOrInnerEndpointDefinitionAware">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
					<xsd:attribute name="requires-reply" type="xsd:string" use="optional">
						<xsd:annotation>
							<xsd:documentation>
								Specify whether the service method must return a non-null value. This value will be
								FALSE by
								default, but if set to TRUE, a MessageHandlingException will be thrown when
								the underlying service method (or
								expression) returns a NULL value.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="handlerEndpointType">
		<xsd:annotation>
			<xsd:documentation>
				Base type for Message-handling endpoints.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="ref" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.lang.Object" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
				A reference to a bean that implements the handler.
				The bean can be an implementation of the MessageHandler interface or a POJO
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-method type-ref="@ref" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
				A method defined on the bean referenced by 'ref' attribute
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="handlerType">
		<xsd:annotation>
			<xsd:documentation>
				Base type for Message Handlers.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="beans:identifiedType">
				<xsd:attribute name="ref" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="java.lang.Object" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
						A reference to a bean that implements the handler.
						The bean can be an implementation of the MessageHandler interface or a POJO
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="method" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-method type-ref="@ref" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
						A method defined on the bean referenced by 'ref' attribute
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="delayer">
		<xsd:annotation>
			<xsd:documentation>
				Defines an endpoint that passes a Message to the output-channel after a
				delay. The delay may
				be
				retrieved from a Message header or else fallback to the
				'default-delay' of this endpoint.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="delayer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="delayer-type">
		<xsd:sequence>
			<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
		<xsd:attribute name="default-delay" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation>
					Specify the default delay in milliseconds. This value can be set to 0
					if the only Messages
					that
					should be delayed are those with a particular header (in that
					case, be sure to provide
					a value for the
					'delay-header-name' attribute).
					</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="delay-header-name" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the name of the header that should contain the delay value.
					This value can either
					represent the number of milliseconds to delay counting from the current
					time or it can be an
					absolute Date until
					which the Message should be delayed.
					</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="scheduler" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Provide a reference to the ScheduledExecutorService instance to which
					this endpoint should
					delegate when scheduling the sending of delayed Messages. If not
					provided, the default
					will use a thread pool of
					size
					1.
					</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.concurrent.ScheduledExecutorService" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-store" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Provide a reference to the MessageStore instance that should be used
					to store Messages while
					awaiting the delay.
					</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.store.MessageStore" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="wait-for-tasks-to-complete-on-shutdown" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify whether tasks should be able to complete on shutdown. By
					default this is 'false'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="bridge">
		<xsd:annotation>
			<xsd:documentation>
				Defines an endpoint that passes a Message to the
				output-channel without
				modifying it.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:choice minOccurs="1" maxOccurs="unbounded">
				<xsd:any processContents="strict" namespace="##other" minOccurs="0" maxOccurs="unbounded" />
				<xsd:element ref="poller" />
			</xsd:choice>
			<xsd:attributeGroup ref="inputOutputChannelGroup" />
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="chain">
		<xsd:annotation>
			<xsd:documentation>
				Defines an endpoint composed of a chain of Message
				Handlers.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="chain-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="chain-type">
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:any processContents="strict" namespace="##other" minOccurs="0" maxOccurs="unbounded" />

			<xsd:element name="service-activator" type="expressionOrInnerEndpointDefinitionAware" />
			<xsd:element name="splitter" type="splitter-type" />
			<xsd:element name="transformer" type="expressionOrInnerEndpointDefinitionAware" />
			<xsd:element name="header-enricher" type="header-enricher-type" />
			<xsd:element name="header-filter" type="header-filter-type" />
			<xsd:element name="filter" type="filter-type" />
			<xsd:element name="aggregator" type="aggregator-type" />
			<xsd:element name="resequencer" type="resequencer-type" />
			<xsd:element name="router" type="router-type" />
			<xsd:element name="payload-type-router" type="payload-type-router-type" />
			<xsd:element name="recipient-list-router" type="recipient-list-router-type" />
			<xsd:element name="header-value-router" type="header-value-router-type" />
			<xsd:element name="delayer" type="delayer-type" />
			<xsd:element name="gateway" type="innerGatewayType" />
			<xsd:element name="poller" type="basePollerType" />
			<xsd:element name="payload-serializing-transformer" type="payload-serializing-transformer-type" />
			<xsd:element name="payload-deserializing-transformer" type="payload-deserializing-transformer-type" />
			<xsd:element name="object-to-string-transformer" type="specialized-transformer-type" />
			<xsd:element name="object-to-map-transformer" type="specialized-transformer-type" />
			<xsd:element name="map-to-object-transformer" type="map-to-object-transformer-type" />
			<xsd:element name="object-to-json-transformer" type="object-to-json-transformer-type" />
			<xsd:element name="json-to-object-transformer" type="json-to-object-transformer-type" />
			<xsd:element name="claim-check-in" type="claimCheckTransformerType" />
			<xsd:element name="claim-check-out" type="claimCheckTransformerType" />
			<xsd:element name="control-bus" type="control-bus-type" />
			<xsd:element name="chain" type="chain-type" />
		</xsd:choice>
	</xsd:complexType>

	<xsd:element name="poller">
		<xsd:annotation>
			<xsd:documentation>
				Defines a top-level poller.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="basePollerType">
					<xsd:attribute name="id" type="xsd:ID" />
					<xsd:attribute name="default" type="xsd:boolean" default="false" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="basePollerType">
		<xsd:annotation>
			<xsd:documentation>
				Defines the configuration metadata for a poller.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:choice minOccurs="0" maxOccurs="1">
				<xsd:element name="interval-trigger" type="intervalTriggerType">
					<xsd:annotation>
						<xsd:documentation>
							NOTE: The 'interval-trigger' sub-element is deprecated as of Spring Integration 2.0 and will be
							removed in version
							2.1.
							Use one of the interval trigger attributes instead ('fixed-delay' or 'fixed-rate').
						</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="cron-trigger" type="cronTriggerType">
					<xsd:annotation>
						<xsd:documentation>
							NOTE: The 'cron-trigger' sub-element is deprecated as of Spring Integration 2.0 and will be
							removed in version 2.1.
							Use the 'cron' attribute instead.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
			<xsd:choice>
				<xsd:element name="transactional" type="transactionalType" minOccurs="0" maxOccurs="1" />
				<xsd:element name="advice-chain" minOccurs="0" maxOccurs="1">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:choice minOccurs="0" maxOccurs="unbounded">
								<xsd:element name="ref" minOccurs="0" maxOccurs="unbounded">
									<xsd:complexType>
										<xsd:attribute name="bean" type="xsd:string" use="required">
											<xsd:annotation>
												<xsd:appinfo>
													<tool:annotation kind="ref">
														<tool:expected-type type="java.lang.Object" />
													</tool:annotation>
												</xsd:appinfo>
											</xsd:annotation>
										</xsd:attribute>
									</xsd:complexType>
								</xsd:element>
								<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded" />
							</xsd:choice>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:sequence>
		<xsd:attribute name="fixed-delay" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>Fixed delay trigger (in milliseconds).</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="ref" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					Allows this poller to reference another instance of a top-level poller. 
					[IMPORTANT] - This attribute is only allowed on inner poller definitions. 
					Defining this attribute on a top-level poller definition will result in a configuration exception.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="fixed-rate" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>Fixed rate trigger (in milliseconds).</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="time-unit">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The java.util.concurrent.TimeUnit enum value. This can ONLY be used in combination
	with the 'fixed-delay' or 'fixed-rate' attributes. If combined with either 'cron'
	or a 'trigger' reference attribute, it will cause a failure. The minimal supported
	granularity for a PeriodicTrigger is MILLISEONDS. Therefore, the only available options
	are MILLISECONDS and SECONDS. If this value is not provided, then any 'fixed-delay' or
	'fixed-rate' value will be interpreted as MILLISECONDS by default. Basically this enum
	provides a convenience for SECONDS-based interval trigger values. For hourly, daily,
	and monthly settings, consider using a 'cron' trigger instead.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="MILLISECONDS" />
					<xsd:enumeration value="SECONDS" />
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="cron" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>Cron trigger.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="trigger" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.scheduling.Trigger" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="receive-timeout" type="xsd:string" />
		<xsd:attribute name="max-messages-per-poll" type="xsd:string" />
		<xsd:attribute name="task-executor" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.core.task.TaskExecutor" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="error-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Identifies channel that error messages will be sent to if a failure occurs in this
					poller's invocation. To completely suppress Exceptions, provide a
					reference to the "nullChannel" here.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="intervalTriggerType">
		<xsd:annotation>
			<xsd:documentation>
				Defines an interval-based trigger.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="interval" type="xsd:string" use="required" />
		<xsd:attribute name="initial-delay" type="xsd:string" />
		<xsd:attribute name="fixed-rate" type="xsd:string" default="false" />
		<xsd:attribute name="time-unit" default="MILLISECONDS">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The java.util.concurrent.TimeUnit enum value. The interval trigger resolution
	only has millisecond granularity, so we only provide MILLISECONDS and SECONDS.
	For hourly, daily, and monthly settings, consider using a cron-trigger instead.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="MILLISECONDS" />
					<xsd:enumeration value="SECONDS" />
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="cronTriggerType">
		<xsd:annotation>
			<xsd:documentation>
				Defines an cron-based trigger.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="expression" type="xsd:string" use="required" />
	</xsd:complexType>

	<xsd:element name="selector-chain">
		<xsd:complexType>
			<xsd:annotation>
				<xsd:documentation>
					Defines a MessageSelector chain.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="selector" type="selectorType" />
				<xsd:element ref="selector-chain" />
			</xsd:choice>
			<xsd:attribute name="id" type="xsd:ID" />
			<xsd:attribute name="voting-strategy" default="ALL">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	Enumeration with values that match the MessageSelectorChain.VotingStrategy enum.
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="ALL" />
						<xsd:enumeration value="ANY" />
						<xsd:enumeration value="MAJORITY" />
						<xsd:enumeration value="MAJORITY_OR_TIE" />
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="selector">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="selectorType">
					<xsd:attribute name="id" type="xsd:string" use="required" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="selectorType">
		<xsd:annotation>
			<xsd:documentation>
				Provides a MessageSelector reference. If a method attribute is set the
				referred bean doesn't need
				to implement the MessageSelector
				interface.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="ref" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.lang.Object" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-method type-ref="@ref" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="header-enricher">
		<xsd:annotation>
			<xsd:documentation>
				Defines a HeaderEnricher endpoint for values defined in the MessageHeader.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="header-enricher-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="header-enricher-type">
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:element name="reply-channel" type="referenceHeaderType">
				<xsd:annotation>
					<xsd:documentation>
					Shortcut to specify value for 'replyChannel' header
					</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="error-channel" type="referenceHeaderType">
				<xsd:annotation>
					<xsd:documentation>
					Shortcut to specify value for 'errorChannel' header
					</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="correlation-id" type="referenceOrValueHeaderType">
				<xsd:annotation>
					<xsd:documentation>
					Shortcut to specify value for 'correlationId' header
					</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="expiration-date" type="referenceOrValueHeaderType">
				<xsd:annotation>
					<xsd:documentation>
					Shortcut to specify value for 'expirationDate' header (java.lang.Long)
					</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="priority">
				<xsd:annotation>
					<xsd:documentation>
						Shortcut to specify value for 'priority' header when using PriorityChannel
					</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="value">
						<xsd:annotation>
							<xsd:documentation>
								Integer value identifying the value of the 'priority' header.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="overwrite">
						<xsd:annotation>
							<xsd:documentation>
								Boolean value to indicate whether this header value should overwrite
								an existing header
								value
								for the same name.
								</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:boolean xsd:string" />
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="header" type="userDefinedHeaderType">
				<xsd:annotation>
					<xsd:documentation>
						Element that accepts any user-defined header name/value pair.
						</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" >
				<xsd:annotation>
					<xsd:documentation>
						Allows you to configure Message Poller if this endpoint is a Polling Consumer
						</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:choice>
		<xsd:attribute name="default-overwrite">
			<xsd:annotation>
				<xsd:documentation>
					Specify the default boolean value for whether to overwrite existing
					header values. This will
					only
					take effect for
					sub-elements that do not provide their own 'overwrite' attribute. If the
					'default-overwrite'
					attribute is not
					provided, then the specified header values will NOT overwrite any
					existing ones with the same
					header
					names. 
					</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string" />
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="should-skip-nulls">
			<xsd:annotation>
				<xsd:documentation>
					Specify whether null values, such as might be returned from an expression evaluation,
					should be
					skipped. The default value is true. Set this to false if a null value should
					trigger removal of the corresponding
					header instead.
					</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string" />
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="ref" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to an Object to be invoked for header values.
					The 'method' attribute is required
					along
					with this.
					</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref" />
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Method to be invoked on the referenced Object as specified by the
					'ref' attribute. The method
					should return a Map with String-typed keys.
					</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-method type-ref="@ref"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="userDefinedHeaderType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Header with a literal value or object reference.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="referenceOrValueHeaderType">
				<xsd:attribute name="name" use="required" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Name of the header to be added.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="referenceOrValueHeaderType">
		<xsd:annotation>
			<xsd:documentation>
				Provides a header value for the given header name. Requires
				exactly one of the 'ref', 'value', or
				'expression' attributes.
				The 'type' attribute allows for the specification of the expected
				type when using a 'value'
				or 'expression', but it is optional.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="referenceHeaderType">
				<xsd:choice minOccurs="0" maxOccurs="1">
					<xsd:any processContents="strict" namespace="##other"/>
					<xsd:element name="expression" type="innerExpressionType" />
				</xsd:choice>
				<xsd:attribute name="value" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Literal value to be associated with the given header name.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Expression to be evaulated at runtime to determine the header value.
							The EvaluationContext will
							include variables for 'payload' and
							'headers'.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="type" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation source="java:java.lang.Class"><![CDATA[
	The fully qualified class name of the header value's expected type.
						]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="referenceHeaderType">
		<xsd:attribute name="ref" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to be associated with the given header name.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref" />
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Name of a method to be invoked on the referenced target object.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-method type-ref="@ref" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="overwrite">
			<xsd:annotation>
				<xsd:documentation>
					Boolean value to indicate whether this header value should overwrite an
					existing header value for
					the same name.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string" />
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="header-filter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a HeaderFilter endpoint to remove values defined in the MessageHeaders.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="header-filter-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="header-filter-type">
		<xsd:attribute name="header-names" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify one or more header names (as a comma separated list) to
					be removed from the
					MessageHeaders
					of the Message being handled.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="pattern-match" type="xsd:boolean" default="true">
			<xsd:annotation>
				<xsd:documentation>
					Boolean flag that specifies whether values provided in 'header-names' should be treated as 
					match patterns or literal values. For example header-names='foo*' would mean remove all 
					headers that begin with 'foo' including the header named 'foo*'. However if you want to 
					treat '*' as literal value setting this flag to FALSE will not perform pattern match and 
					the only header that will be removed is the one that is an exact match.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="expressionOrInnerEndpointDefinitionAware">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="object-to-string-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts any Object payload to a String by
				invoking its toString()
				method.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="specialized-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="object-to-map-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts any Object payload to a SpEL Map.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="specialized-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="map-to-object-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts SpEL-based Map to an object.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="map-to-object-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="map-to-object-transformer-type">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="poller" />
		</xsd:choice>
		<xsd:attribute name="type" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation source="java:java.lang.Class"><![CDATA[
					Fully qulified name of the java type to be created by this transformer (e.g. foo.bar.Foo)
					NOTE: This attribute is mutually-exclusive with 'ref'.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="ref" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					The name of the bean to be produced by this transformer. The bean MUST BE of scope 'prototype'.
					NOTE: This attribute is mutually-exclusive with 'type'.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.lang.Object" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="object-to-json-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts any Object payload to a JSON String.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="object-to-json-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="object-to-json-transformer-type">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="poller" />
		</xsd:choice>
		<xsd:attribute name="object-mapper" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a Jackson ObjectMapper instance to be provided optionally
					if the default ObjectMapper
					configuration is not desirable.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.codehaus.jackson.map.ObjectMapper" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="json-to-object-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts a JSON String to an object.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="json-to-object-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="json-to-object-transformer-type">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="poller" />
		</xsd:choice>
		<xsd:attribute name="type" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation source="java:java.lang.Class"><![CDATA[
					Fully qulified name of the java type to be created by this transformer (e.g. foo.bar.Foo)
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="object-mapper" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a Jackson ObjectMapper instance to be provided optionally
					if the default ObjectMapper
					configuration is not desirable.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.codehaus.jackson.map.ObjectMapper" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="payload-serializing-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts an object payload to a byte array.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="payload-serializing-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="payload-serializing-transformer-type">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="poller" />
		</xsd:choice>
		<xsd:attribute name="serializer" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a Serializer instance to convert from an object to a byte array.
					This is optional.
					The default will use standard Java serialization.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.core.serializer.Serializer" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="payload-deserializing-transformer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that converts a byte array to an object.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="payload-deserializing-transformer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="payload-deserializing-transformer-type">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="poller" />
		</xsd:choice>
		<xsd:attribute name="deserializer" use="optional">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a Deserializer instance to convert from a byte array to an object.
					This is optional.
					The default will use standard Java deserialization.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.core.serializer.Deserializer" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="claim-check-in" type="claimCheckTransformerType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that stores a Message and returns a new Message whose
				payload is the id of
				the stored Message.
			</xsd:documentation>
		</xsd:annotation>
	</xsd:element>

	<xsd:element name="claim-check-out">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Transformer that accepts a Message whose payload is a UUID and
				retrieves the Message
				associated with that id from a MessageStore if
				available (else null).
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="claimCheckTransformerType">
					<xsd:attribute name="remove-message" type="xsd:boolean" default="false">
						<xsd:annotation>
							<xsd:documentation>
								If set to 'true' the Message will be removed from the MessageStore by 
								this transformer. Useful when Message can be 'claimed' only once. DEFAULT is 'false'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="claimCheckTransformerType">
		<xsd:sequence minOccurs="0" maxOccurs="1">
			<xsd:element ref="poller" />
		</xsd:sequence>
		<xsd:attribute name="message-store" default="messageStore">
			<xsd:annotation>
				<xsd:documentation>
					Reference to the MessageStore to be used by this Claim Check transformer.
					If not specified, the
					default reference will be to a bean named 'messageStore'.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.store.MessageStore" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="inputOutputChannelGroup" />
	</xsd:complexType>

	<xsd:complexType name="specialized-transformer-type">
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:any processContents="strict" namespace="##other" minOccurs="0" maxOccurs="unbounded" />
			<xsd:element ref="poller" />
		</xsd:choice>
	</xsd:complexType>

	<xsd:element name="filter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Filters that is used to decide whether a Message should be passed 
				along or dropped based on some criteria
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="filter-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="filter-type">
		<xsd:complexContent>
			<xsd:extension base="expressionOrInnerEndpointDefinitionAware">
				<xsd:attribute name="discard-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.MessageChannel" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
						The channel where the filter will send the messages that were dropped
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="throw-exception-on-rejection" type="xsd:string" default="false" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="header-value-router">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Defines a Header Value Router. The 'header-name' attribute specifies which
	header value to lookup. That header value can then provide the name of a
	channel to be resolved. Alternatively, 1 or more 'mapping' sub-elements
	may be provided with expected header values mapped to channels.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="header-value-router-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="header-value-router-type">
		<xsd:complexContent>
			<xsd:extension base="channelNameResolvingRouterType">
				<xsd:attribute name="header-name" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
Name of the header whose value will be used to route messages
						]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="recipient-list-router">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Defines a Recipient List Router. 
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="recipient-list-router-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="recipient-list-router-type">
		<xsd:complexContent>
			<xsd:extension base="baseRouterType">
				<xsd:sequence>
					<xsd:element name="recipient" minOccurs="1" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="selector-expression" type="xsd:string">
								<xsd:annotation>
									<xsd:documentation>
										An expression to be evaluated to determine if this recipient should be included in the
										recipient
										list for a given input Message. The evaluation result of the expression must be a boolean.
										If this
										attribute is not defined, the channel will always be among the list of recipients.
										</xsd:documentation>
								</xsd:annotation>
							</xsd:attribute>
							<xsd:attribute name="channel" type="xsd:string" use="required">
								<xsd:annotation>
									<xsd:appinfo>
										<tool:annotation kind="ref">
											<tool:expected-type type="org.springframework.integration.MessageChannel" />
										</tool:annotation>
									</xsd:appinfo>
								</xsd:annotation>
							</xsd:attribute>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="payload-type-router">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Defines a Payload Type Router. The 'mapping' sub-elements specify the
	associations between Java types and target channels.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="payload-type-router-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="payload-type-router-type">
		<xsd:complexContent>
			<xsd:extension base="channelResolvingRouterType">
				<xsd:sequence>
					<xsd:element name="mapping" minOccurs="1" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="type" type="xsd:string" />
							<xsd:attribute name="channel" type="xsd:string">
								<xsd:annotation>
									<xsd:appinfo>
										<tool:annotation kind="ref">
											<tool:expected-type type="org.springframework.integration.MessageChannel" />
										</tool:annotation>
									</xsd:appinfo>
								</xsd:annotation>
							</xsd:attribute>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:element name="exception-type-router">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Defines a Exception Type Router which resolves the target MessageChannel for
    messages whose payload is an Exception. The channel resolution is based upon
    the most specific cause of the error for which a channel mapping exists.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="exception-type-router-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:complexType name="exception-type-router-type">
		<xsd:complexContent>
			<xsd:extension base="channelResolvingRouterType">
				<xsd:sequence>
					<xsd:element name="mapping" minOccurs="1" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:attribute name="exception-type" type="xsd:string"/>
							<xsd:attribute name="channel" type="xsd:string">
								<xsd:annotation>
									<xsd:appinfo>
										<tool:annotation kind="ref">
											<tool:expected-type type="org.springframework.integration.MessageChannel" />
										</tool:annotation>
									</xsd:appinfo>
								</xsd:annotation>
							</xsd:attribute>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="router">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Defines a Router that serves as an adapter for invoking a method on any
	Spring-managed object as specified by the "ref" and "method" attributes.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="router-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="router-type">
		<xsd:complexContent>
			<xsd:extension base="channelNameResolvingRouterType">
				<xsd:choice minOccurs="0" maxOccurs="2">
					<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
					<xsd:element name="expression" type="innerExpressionType" minOccurs="0" maxOccurs="1" />
					<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="1" />
				</xsd:choice>
				<xsd:attribute name="ref" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="java.lang.Object" />
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="method" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-method type-ref="@ref" />
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="expression" type="xsd:string" />
				<xsd:attribute name="channel-resolver" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
	Provides a reference to a ChannelResolver that resolves the return value
	to the name of a MessageChannel within the application context. If none
	is provided, the return value is expected to match a channel name exactly.
							]]></xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.support.channel.ChannelResolver" />
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="channelNameResolvingRouterType">
		<xsd:complexContent>
			<xsd:extension base="channelResolvingRouterType">
				<xsd:sequence>
					<xsd:element name="mapping" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>
							<![CDATA[
	Defines mapping rules for this router 
	(e.g., mapping value='foo' channel='myChannel')]]>	
							</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:attribute name="value" type="xsd:string">
								<xsd:annotation>
									<xsd:documentation>
									A value of the evaluation token that will be mapped to a channel reference 
									(e.g., mapping value='foo' channel='myChannel')
									</xsd:documentation>
								</xsd:annotation>
							</xsd:attribute>
							<xsd:attribute name="channel" type="xsd:string">
								<xsd:annotation>
									<xsd:documentation>
										A reference to a bean that defines a Message Channel
										(e.g., mapping value='foo' channel='myChannel')
									</xsd:documentation>
									<xsd:appinfo>
										<tool:annotation kind="ref">
											<tool:expected-type type="org.springframework.integration.MessageChannel" />
										</tool:annotation>
									</xsd:appinfo>
								</xsd:annotation>
							</xsd:attribute>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
				<xsd:attribute name="ignore-channel-name-resolution-failures" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Specify whether a failure to resolve a channel name returned by this
							router should be ignored.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="channelResolvingRouterType">
		<xsd:complexContent>
			<xsd:extension base="baseRouterType">
				<xsd:attribute name="default-output-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.MessageChannel" />
							</tool:annotation>
							<xsd:documentation>
								Reference to the default channel where Messages should be sent if channel
								resolution fails to
								return any channels. If no default channel
								is
								provided, the router will either drop the Message or throw an
								Exception
								depending on the value of the "resolution-required" attribute.
							</xsd:documentation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="resolution-required" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Specify whether this router should always be required to return at least
							one channel or name.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="baseRouterType">
		<xsd:attribute name="timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the maximum amount of time in milliseconds to wait when sending
					Messages
					to the target
					MessageChannels. By default the send will block
					indefinitely.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="ignore-send-failures" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify whether a failure to send to a single channel should be ignored.
					Otherwise
					MessageDeliveryExceptions will be thrown.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="apply-sequence" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify whether sequence number and size headers should be added to each
					Message.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:element name="splitter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Splitter.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="splitter-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="splitter-type">
		<xsd:complexContent>
			<xsd:extension base="expressionOrInnerEndpointDefinitionAware">
				<xsd:attribute name="requires-reply" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation>
							Specify whether the splitter method must return a non-null value. This value will be
							FALSE by default, but if set to TRUE, a MessageHandlingException will be thrown when
							the underlying service method (or expression) returns a NULL value.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="apply-sequence" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation>
							Set this flag to false to prevent adding sequence related headers in this splitter.
							This can be convenient in cases where the set sequence numbers conflict with downstream
							custom aggregations.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="delimiters" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation>
							Provide one or more delimiters (as a single String value, e.g. delimiters=",;:") for
							tokenizing String-typed payload values. This attribute is only allowed if no 'ref' or
							'expression' have been provided since that is when the DefaultMessageSplitter would
							be used, and it's the implementation that contains the "delimiters" property.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="aggregator">
		<xsd:annotation>
			<xsd:documentation>
				Defines an aggregating message endpoint.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="aggregator-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="aggregator-type">
		<xsd:complexContent>
			<xsd:extension base="correlating-message-handler-type">
				<xsd:attribute name="expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							A SpEL expression to be evaluated against the input message list as its root object.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="correlating-message-handler-type">
		<xsd:complexContent>
			<xsd:extension base="innerEndpointDefinitionAware">
				<xsd:attribute name="release-strategy" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="java.lang.Object" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
							A reference to a bean that implements the release strategy. 
							The bean can be an implementation of the
							ReleaseStrategy interface or a POJO
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="release-strategy-method" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-method type-ref="@release-strategy" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
							A method defined on the bean referenced by release-strategy, that implements the completion
							decision algorithm.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="release-strategy-expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>A SpEL expression to evaluate against a root object that is the Collection of messages within the message group (e.g, size() > 6)</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="correlation-strategy" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="java.lang.Object" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
							A reference to a bean that implements the decision algorithm as to whether a given 
							message group is complete. The bean can be an implementation of the 
							CorrelationStrategy interface or a POJO.
							</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="correlation-strategy-method" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-method type-ref="@correlation-strategy" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
						A method defined on the bean referenced by correlation-strategy, that implements the
						correlation decision algorithm
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="correlation-strategy-expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>A SpEL expression which implements correlation decision 
						algorithm to apply to the Message (e.g., payload.getPerson().getId() - correlate
						 based on the 'id' of the 'person' attribute of the message payload object)</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="discard-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.MessageChannel" />
							</tool:annotation>
						</xsd:appinfo>
						<xsd:documentation>
						The channel where the aggregator will send the messages that timed out (if send-partial-results-
						on-expiry is 'false').
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="message-store" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Reference to a MessageGroupStore for holding
							state in between message processing. The default
							is to use a volatile in-memory store, which means that unprocessed messages
							will be lost if the JVM exits. To customize
							the expiry of incomplete message groups configure the message store.
							</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.store.MessageGroupStore" />
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="send-partial-result-on-expiry" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
						Specifies whether messages that expired should be aggregated and sent to the 'output-channel' or 'replyChannel'. 
						Messages are expired when their containing MessageGroup expires. One of the ways of expiring MessageGroups is by 
						configuring a MessageGroupStoreReaper. However MessageGroups can alternatively be expired by simply calling 
						MessageGroupStore.expireMessageGroup(groupId). That could be accomplished via a ControlBus operation
						or by simply invoking that method if you have a reference to the MessageGroupStore instance.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="resequencer">
		<xsd:annotation>
			<xsd:documentation>
				Defines a resequencing message endpoint.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="resequencer-type">
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="resequencer-type">
		<xsd:complexContent>
			<xsd:extension base="correlating-message-handler-type">
				<xsd:attribute name="comparator" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Comparator for messages used to sort the sequence when released. Defaults to comparing
							the
							sequence number header.
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="java.util.Comparator" />
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="release-partial-sequences" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Flag to say that partial sequences can be released (e.g. 1-4 of 10).
							Defaults to true, so the
							sequence has to be complete before any messages
							are released.
							This is mutually exclusive with the release-strategy
							attribute (either or none can be specified , but not both).
							</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="channelInterceptorsType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a list of interceptors. Each element may be a ChannelInterceptor,
				ref, or inner-bean.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="ref" minOccurs="0" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation>
							Reference to a bean in this Application Context that implements ChannelInterceptor
						</xsd:documentation>
					</xsd:annotation>  
					<xsd:complexType>
						<xsd:attribute name="bean" use="required">
							<xsd:annotation>
								<xsd:appinfo>
									<tool:annotation kind="ref">
										<tool:expected-type type="org.springframework.integration.channel.ChannelInterceptor" />
									</tool:annotation>
								</xsd:appinfo>
								<xsd:documentation>
							Reference to a bean in this Application Context that implements ChannelInterceptor
						</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="wire-tap" type="wireTapType" minOccurs="0" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation>
						Alows you to configure a Wire Tap interceptor that will send a copy of the message to a 
						channel identified by 'channel' attribute.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded" />
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="wireTapType">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Wire Tap Channel Interceptor.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:ID" use="optional" />
		<xsd:attribute name="channel" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="selector" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
				A reference to a bean in the Application Context
				which implements  MessageSelector that must accept a message for it to be
	 			sent to the intercepting channel
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
				The timeout for sending the message to the intercepting channel
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="transactionalType">
		<xsd:attribute name="transaction-manager" type="xsd:string" default="transactionManager">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The bean name of the PlatformTransactionManager to use.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.transaction.PlatformTransactionManager" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="propagation" default="REQUIRED">
			<xsd:annotation>
				<xsd:documentation source="java:org.springframework.transaction.annotation.Propagation"><![CDATA[
	The transaction propagation behavior.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="REQUIRED" />
					<xsd:enumeration value="SUPPORTS" />
					<xsd:enumeration value="MANDATORY" />
					<xsd:enumeration value="REQUIRES_NEW" />
					<xsd:enumeration value="NOT_SUPPORTED" />
					<xsd:enumeration value="NEVER" />
					<xsd:enumeration value="NESTED" />
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="isolation" default="DEFAULT">
			<xsd:annotation>
				<xsd:documentation source="java:org.springframework.transaction.annotation.Isolation"><![CDATA[
	The transaction isolation level.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="DEFAULT" />
					<xsd:enumeration value="READ_UNCOMMITTED" />
					<xsd:enumeration value="READ_COMMITTED" />
					<xsd:enumeration value="REPEATABLE_READ" />
					<xsd:enumeration value="SERIALIZABLE" />
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:string" default="-1">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The transaction timeout value (in seconds).
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="read-only" type="xsd:string" default="false">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	Is this transaction read-only?
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="expressionOrInnerEndpointDefinitionAware">
		<xsd:complexContent>
			<xsd:extension base="handlerEndpointType">
				<xsd:choice minOccurs="0" maxOccurs="2">
					<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
					<xsd:element name="expression" type="innerExpressionType" minOccurs="0" maxOccurs="1" />
					<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="1" />
				</xsd:choice>
				<xsd:attribute name="expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							A SpEL expression to be evaluated against the input Message as its root object.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="innerExpressionType">
		<xsd:attribute name="key" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation>
					The key for retrieving the expression from an ExpressionSource.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="source" type="xsd:string" default="expressionSource">
			<xsd:annotation>
				<xsd:documentation>
					The reference to an ExpressionSource.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.expression.ExpressionSource" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="innerEndpointDefinitionAware">
		<xsd:complexContent>
			<xsd:extension base="handlerEndpointType">
				<xsd:choice minOccurs="0" maxOccurs="2">
					<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
					<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="1" />
				</xsd:choice>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="publishing-interceptor">
		<xsd:annotation>
			<xsd:documentation>
				Defines a MessagePublishingInterceptor which allows you to generate messages
				as a by-product of
				method invocations on Spring configured components.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="method" minOccurs="0" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence minOccurs="0" maxOccurs="unbounded">
							<xsd:element name="header">
								<xsd:complexType>
									<xsd:attribute name="name" type="xsd:string" use="required" />
									<xsd:attribute name="value" type="xsd:string" />
									<xsd:attribute name="expression" type="xsd:string" />
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
						<xsd:attribute name="pattern" type="xsd:string" />
						<xsd:attribute name="payload" type="xsd:string" />
						<xsd:attribute name="channel" type="xsd:string">
							<xsd:annotation>
								<xsd:appinfo>
									<tool:annotation kind="ref">
										<tool:expected-type type="org.springframework.integration.MessageChannel" />
									</tool:annotation>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
			<xsd:attribute name="id" type="xsd:ID" use="required" />
			<xsd:attribute name="default-channel" type="xsd:string" default="nullChannel">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	Specifies default-channel to publish messages
					]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.integration.MessageChannel" />
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

    <xsd:element name="wire-tap">
      <xsd:complexType>
        <xsd:complexContent>
           <xsd:extension base="wireTapType">
              <xsd:attribute name="pattern" type="xsd:string" use="optional">
                <xsd:annotation>
                    <xsd:documentation>
                        [REQUIRED] Channel name(s) or patterns. To specify more than one channel use
                        ',' 
                        (e.g.,
                        channel-name-pattern="input*, foo, bar")
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:attribute>
            <xsd:attribute name="order" type="xsd:integer" use="optional">
                <xsd:annotation>
                    <xsd:documentation>
                        [OPTIONAL] Specifies the order in which this interceptor will be
                        added to the existing channel
                        interceptors (if any).
                        Negative value (e.g., -2) will signify BEFORE existing iinterceptors (if any). Positive
                        value (e.g., 2)
                        will signify AFTER existing interceptors (if any)
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:attribute>
           </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    </xsd:element>
    
	<xsd:element name="channel-interceptor">
		<xsd:annotation>
			<xsd:documentation>
				Allows you to define channel interceptors to be applied globally.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
			    <xsd:any namespace="##any" processContents="strict" minOccurs="0" maxOccurs="1" />				
			</xsd:sequence>
			<xsd:attribute name="pattern" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						[REQUIRED] Channel name(s) or patterns. To specify more than one channel use
						',' 
						(e.g.,
						channel-name-pattern="input*, foo, bar")
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="order" type="xsd:integer" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						[OPTIONAL] Specifies the order in which this interceptor will be
						added to the existing channel
						interceptors (if any).
						Negative value (e.g., -2) will signify BEFORE existing iinterceptors (if any). Positive
						value (e.g., 2)
						will signify AFTER existing interceptors (if any)
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="ref" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						<![CDATA[
	[OPTIONAL] points to a bean reference which implements this interceptor. Could also be defined as inner &lt;bean&gt; element.
				]]>
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="converter">
		<xsd:annotation>
			<xsd:documentation>
			Allows you to register Converters (implementation of the Converter interface) that will
be automatically registered with the ConversionService. ConversionService itself does not have to be 
explicitly defined since the default ConversionService will be registered under the name 'integrationConversionService'
unless bean with this name is already registered.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:all minOccurs="0" maxOccurs="1">
				<xsd:element ref="beans:bean" />
			</xsd:all>
			<xsd:attribute name="ref" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="java.lang.Object" />
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						<![CDATA[
	[OPTIONAL] points to a bean reference which implements this Converter. Could also be defined as inner &lt;bean&gt; element.
						]]>
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="message-history">
		<xsd:annotation>
			<xsd:documentation>
				<![CDATA[
Will register Message History writer which will track message hostory. There can 
only be one Message History writer per ApplicationContext hierarchy.
					]]>
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="tracked-components" type="xsd:string" default="*">
				<xsd:annotation>
					<xsd:documentation>
				<![CDATA[
The list of component name patterns you want to track (e.g.,  tracked-components="inputChannel, out*, *Channel, *Service")
					]]>
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="control-bus">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="control-bus-type">
					<xsd:all minOccurs="0" maxOccurs="1">
						<xsd:element name="poller" type="basePollerType" minOccurs="0" maxOccurs="1" />
					</xsd:all>
					<xsd:attributeGroup ref="inputOutputChannelGroup" />
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="control-bus-type">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
				Control bus that accepts messages in the form of SpEL expressions. The expressions should be provided
				either as Expression or String payloads (that can be parsed into valid Expressions) in incoming messages.
				The expressions can refer to beans in the context using the standard @beanName convention. The methods
				that will be available include:
				   1) any that are annotated with @ManagedAttribute or @ManagedOperation
				   2) Lifecycle methods
				   3) get/set or shutdown methods on configurable TaskExecutors or TaskSchedulers 
			]]></xsd:documentation>
		</xsd:annotation>
	</xsd:complexType>

	<xsd:attributeGroup name="inputOutputChannelGroup">
		<xsd:attribute name="id" type="xsd:ID" />
		<xsd:attribute name="output-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
				Identifies the Message channel where Message will be sent after it's being processed by this endpoint
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="send-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the maximum amount of time in milliseconds to wait when sending a reply
					Message to the
					output channel. By default the send will block for one second. 
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="input-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
				<xsd:documentation>
				The receiving Message channel of this endpoint
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="order" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Specifies the order for invocation when this endpoint is connected as a
subscriber to a channel. This is particularly relevant when that channel
is using a "failover" dispatching strategy. It has no effect when this
endpoint itself is a Polling Consumer for a channel with a queue.
					]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="auto-startup" type="xsd:string" >
			<xsd:annotation>
			<xsd:documentation>
					Lifecycle attribute signaling if this component should be started during Application Context startup.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>
</xsd:schema>