<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns="http://www.springframework.org/schema/jms"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:tool="http://www.springframework.org/schema/tool"
		targetNamespace="http://www.springframework.org/schema/jms"
		elementFormDefault="qualified"
		attributeFormDefault="unqualified">

	<xsd:import namespace="http://www.springframework.org/schema/tool"/>

	<xsd:annotation>
		<xsd:documentation><![CDATA[
	Defines the configuration elements for the Spring Framework's JMS support.
	Allows for configuring JMS listener containers in XML 'shortcut' style.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="listener-container">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Each listener child element will be hosted by a container whose configuration
	is determined by this parent element. This variant builds standard JMS
	listener containers, operating against a specified JMS ConnectionFactory.
			]]></xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.jms.listener.AbstractMessageListenerContainer"/>
				</tool:annotation>	
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="listener" type="listenerType" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:attribute name="container-type" default="default">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The type of this listener container: "default" or "simple", choosing
	between DefaultMessageListenerContainer and SimpleMessageListenerContainer.
	The "102" suffix adapts to a JMS provider that implements JMS 1.0.2 only.
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="default"/>
						<xsd:enumeration value="default102"/>
						<xsd:enumeration value="simple"/>
						<xsd:enumeration value="simple102"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="connection-factory" type="xsd:string" default="connectionFactory">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the JMS ConnectionFactory bean.
	Default is "connectionFactory".
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="task-executor" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the Spring TaskExecutor for the JMS listener invokers.
	Default is a SimpleAsyncTaskExecutor, using internally managed threads.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="destination-resolver" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the DestinationResolver strategy for resolving destination names.
	Default is a DynamicDestinationResolver, using the JMS provider's queue/topic
	name resolution. Alternatively, specify a reference to a JndiDestinationResolver
	(typically in a J2EE environment).
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="message-converter" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the MessageConverter strategy for converting JMS Messages to
	listener method arguments. Default is a SimpleMessageConverter.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="destination-type" default="queue">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The JMS destination type for this listener: "queue", "topic" or "durableTopic".
	Default is "queue".
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="queue"/>
						<xsd:enumeration value="topic"/>
						<xsd:enumeration value="durableTopic"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="client-id" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The JMS client id for this listener container.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="acknowledge" default="auto">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The native JMS acknowledge mode: "auto", "client", "dups-ok" or "transacted".
	The latter effectively activates a locally transacted Session; as alternative,
	specify an external "transaction-manager" via the corresponding attribute.
	Default is "auto".
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="auto"/>
						<xsd:enumeration value="client"/>
						<xsd:enumeration value="dups-ok"/>
						<xsd:enumeration value="transacted"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="transaction-manager" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to an external PlatformTransactionManager (typically an
	XA-based transaction coordinator, e.g. Spring's JtaTransactionManager).
	If not specified, native acknowledging will be used (see "acknowledge" attribute).
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="concurrency" type="xsd:int">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The maximum number of concurrent sessions/consumers to start for each listener.
	Default is 1.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="prefetch" type="xsd:int">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The maximum number of messages to load into a single session.
	Note that raising this number might lead to starvation of concurrent consumers!
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="jca-listener-container">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Each listener child element will be hosted by a container whose configuration
	is determined by this parent element. This variant builds standard JCA-based
	listener containers, operating against a specified JCA ResourceAdapter
	(which needs to be provided by the JMS message broker, e.g. ActiveMQ).
			]]></xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager"/>
				</tool:annotation>
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="listener" type="listenerType" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:attribute name="resource-adapter" type="xsd:string" default="resourceAdapter">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the JCA ResourceAdapter bean for the JMS provider.
	Default is "resourceAdapter".
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="activation-spec-factory" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the JmsActivationSpecFactory.
	Default is to autodetect the JMS provider and its ActivationSpec class
	(see DefaultJmsActivationSpecFactory).
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="message-converter" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the MessageConverter strategy for converting JMS Messages to
	listener method arguments. Default is a SimpleMessageConverter.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="destination-type" default="queue">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The JMS destination type for this listener: "queue", "topic" or "durableTopic".
	Default is "queue".
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="queue"/>
						<xsd:enumeration value="topic"/>
						<xsd:enumeration value="durableTopic"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="client-id" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The JMS client id for this listener container.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="acknowledge" default="auto">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The native JMS acknowledge mode: "auto", "client", "dups-ok" or "transacted".
	The latter effectively activates a locally transacted Session; as alternative,
	specify an external "transaction-manager" via the corresponding attribute.
	Default is "auto".
					]]></xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="auto"/>
						<xsd:enumeration value="client"/>
						<xsd:enumeration value="dups-ok"/>
						<xsd:enumeration value="transacted"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="transaction-manager" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the Spring JtaTransactionManager or [javax.transaction.TransactionManager],
	for kicking off an XA transaction for each incoming message.
	If not specified, native acknowledging will be used (see "acknowledge" attribute).
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="concurrency" type="xsd:int">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The maximum number of concurrent sessions to activate for each listener.
	Default is 1.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="prefetch" type="xsd:int">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The maximum number of messages to load into a single session.
	Note that raising this number might lead to starvation of concurrent consumers!
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="listenerType">
			<xsd:attribute name="id" type="xsd:ID">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The unique identifier for a listener.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		<xsd:attribute name="destination" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The destination name for this listener, resolved through the
	container-wide DestinationResolver strategy. Required.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="subscription" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The name for the durable subscription, if any.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="selector" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The JMS message selector for this listener.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="ref" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The bean name of the listener object, implementing
	the MessageListener/SessionAwareMessageListener interface
	or defining the specified listener method. Required.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="method" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The name of the listener method to invoke. If not specified,
	the target bean is supposed to implement the MessageListener
	or SessionAwareMessageListener interface.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="response-destination" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The name of the default response destination to send response messages to.
	This will be applied in case of a request message that does not carry
	a "JMSReplyTo" field. The type of this destination will be determined
	by the listener-container's "destination-type" attribute.
	Note: This only applies to a listener method with a return value,
	for which each result object will be converted into a response message.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
</xsd:schema>

