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

	<xsd:import namespace="http://www.springframework.org/schema/beans"/>
	<xsd:import namespace="http://www.springframework.org/schema/tool"/>
	<xsd:import namespace="http://www.springframework.org/schema/integration"
				schemaLocation="https://www.springframework.org/schema/integration/spring-integration.xsd"/>

	<xsd:annotation>
		<xsd:documentation><![CDATA[
	Defines the configuration elements for Spring Integration's JMS adapters.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="channel">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Channel ('org.springframework.integration.jms.config.JmsChannelFactoryBean')
				that is backed by a JMS Queue.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="queue" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Reference to a JMS Queue. Either this attribute or the 'queue-name'
								must be provided, but only one.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="message-driven" type="xsd:boolean" default="true">
						<xsd:annotation>
							<xsd:documentation>
								Specifies whether this channel should be Message-Driven. The value is "true" by default.
								Set to "false" if this channel should be pollable.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="queue-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Name of a JMS Queue to be resolved by this channel's DestinationResolver.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="publish-subscribe-channel">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Channel ('org.springframework.integration.jms.config.JmsChannelFactoryBean')
				that is backed by a JMS Topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="topic" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Reference to a JMS Topic. Either this attribute or the 'topic-name'
								must be provided, but only one.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="topic-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Name of a JMS Topic to be resolved by this channel's DestinationResolver.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="durable" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean value indicating whether the Topic subscription is durable.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="client-id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The JMS client id. Should be specified when using durable subscriptions.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The name for the durable or shared subscription, if any.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-shared" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean property indicating whether to make the subscription shared. The shared
								subscription name to be used can be
								specified through the 'subscription' attribute. Default is "false". Set this to "true"
								to register a shared
								subscription.
								Note that shared subscriptions may also be durable, so this flag can
								(and often will) be combined with 'durable' as well. Requires a JMS 2.0 compatible
								message broker.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="channelType">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Base type for JMS Destination backed Message Channels (either 'channel' for a
	Queue-backed channel or 'publish-subscribe-channel' for a Topic-backed channel).
			]]></xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.integration.jms.AbstractJmsChannel"/>
				</tool:annotation>
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="interceptors" type="integration:channelInterceptorsType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A list of ChannelInterceptor instances to be applied to this channel.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation>
					ID for this channel. Required.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="connection-factory" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a JMS ConnectionFactory. If none is provided, the default
					bean name for the reference will be "jmsConnectionFactory".
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="jakarta.jms.ConnectionFactory"/>
					</tool:annotation>
				</xsd:appinfo>
			</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:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.jms.support.destination.DestinationResolver"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="container-type">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The type of this listener container: "default" or "simple", choosing
	between DefaultMessageListenerContainer and SimpleMessageListenerContainer.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="listenerContainerEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="container-class" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A custom listener container implementation class as fully qualified class name.
	Default is Spring's standard DefaultMessageListenerContainer or
	SimpleMessageListenerContainer, according to the "container-type" attribute.
	Note that a custom container class will typically be a subclass of either of
	those two Spring-provided standard container classes: Make sure that the
	"container-type" attribute matches the actual base type that the custom class
	derives from ("default" will usually be fine anyway, since most custom classes
	will derive from DefaultMessageListenerContainer).
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation>
						<tool:expected-type type="java.lang.Class"/>
						<tool:assignable-to type="org.springframework.jms.listener.AbstractMessageListenerContainer"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="receive-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Timeout for the container's consumers if message-driven is TRUE, or
					timeout for receive calls on the template if message-driven is FALSE.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="task-executor" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for executing
	JMS listener invokers. Default is a SimpleAsyncTaskExecutor in case of a
	DefaultMessageListenerContainer, using internally managed threads. For a
	SimpleMessageListenerContainer, listeners will always get invoked within the
	JMS provider's receive thread by default.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.concurrent.Executor"/>
					</tool:annotation>
				</xsd:appinfo>
			</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 between JMS Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.jms.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="error-handler" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A reference to an ErrorHandler strategy for handling any uncaught Exceptions
	that may occur during the execution of the underlying MessageListener.
				]]></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="selector" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The JMS message selector for this channel's underlying MessageListener.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="cache">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The cache level for JMS resources: "none", "connection", "session", "consumer"
	or "auto". By default ("auto"), the cache level will effectively be "consumer",
	unless an external transaction manager has been specified - in which case the
	effective default will be "none" (assuming J2EE-style transaction management
	where the given ConnectionFactory is an XA-aware pool).
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="cacheLevelEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="acknowledge" default="transacted">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The native JMS acknowledge mode: "auto", "client", "dups-ok" or "transacted".
	A value of "transacted" effectively activates a locally transacted Session;
	alternatively, specify an external "transaction-manager" via the corresponding
	attribute. Default is "transacted".
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="jsmAcknowledgeModeEnumeration xsd:string"/>
			</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:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.transaction.PlatformTransactionManager"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="concurrency" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The number of concurrent sessions/consumers to start for each listener.
	Can either be a simple number indicating the maximum number (e.g. "5")
	or a range indicating the lower as well as the upper limit (e.g. "3-5").
	Note that a specified minimum is just a hint and might be ignored at runtime.
	Default is 1; keep concurrency limited to 1 in case of a topic listener
	or if message ordering is important; consider raising it for general queues.
				]]></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:attribute name="delivery-persistent" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify a boolean value indicating whether the delivery mode should be
					DeliveryMode.PERSISTENT (true) or DeliveryMode.NON_PERSISTENT (false).
					This setting will only take effect if 'explicit-qos-enabled' is true.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="time-to-live" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the message time to live.
					This setting will only take effect if 'explicit-qos-enabled' is true.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="priority" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the default priority of the message. Overridden by the message priority
					header, if present; range 0-9.
					This setting will only take effect if 'explicit-qos-enabled' is true.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="explicit-qos-enabled" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	Setting this attribute to true enables the use of quality of service attributes - message
	priority, delivery mode, time to live.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="integration:subscribersAttributeGroup"/>
		<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
	</xsd:complexType>

	<xsd:element name="message-driven-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.jms.JmsMessageDrivenEndpoint' (one-way) to listen form message
				on the JMS destination.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="jmsMessageDrivenInboundAdapterType">
					<xsd:attribute name="destination" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
								reference, use 'destination-name' and 'pub-sub-domain' which will rely upon the
								DestinationResolver strategy (DynamicDestinationResolver by default).
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="jakarta.jms.Destination"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="destination-name" type="xsd:string"/>
					<xsd:attribute name="pub-sub-domain" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The boolean property used to configure the listener container with knowledge of what JMS
								domain is being used.
								Unless 'subscription-shared' or 'subscription-durable' is true, by default the value of
								this property is 'false' ,
								indicating that the point-to-point domain, Queues, will be used. When true, the pub/sub
								domain, Topics, will
								be used.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-durable" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean property indicating whether to make the subscription durable. The durable
								subscription name to be used can be specified
								through the "durableSubscriptionName" property. Default is "false". Set this to "true"
								to register a durable subscription,
								typically in combination with a "durableSubscriptionName" value (unless your message
								listener class name is good enough as
								subscription name). Only makes sense when listening to a topic (pub-sub domain).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-shared" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean property indicating whether to make the subscription shared. The shared
								subscription name to be used can be
								specified through the 'subscription-name' attribute. Default is "false". Set this to
								"true" to register a shared
								subscription, typically in combination with a 'subscription-name' value (unless your
								message listener class name is
								good enough as subscription name). Note that shared subscriptions may also be durable,
								so this flag can
								(and often will) be combined with 'subscription-durable' as well.
								Only makes sense when listening to a topic (pub-sub domain), therefore this
								automatically sets
								'pub-sub-domain' to 'true'. Requires a JMS 2.0 compatible message broker.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The name of a subscription to create. To be applied in case of a topic (pub-sub domain)
								with a shared or durable
								subscription. The subscription name needs to be unique within this client's JMS client
								id. Default is the class name
								of the specified message listener.
								Note: Only 1 concurrent consumer (which is the default of the message listener
								container) is allowed for each
								subscription, except for a shared subscription (which requires JMS 2.0).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="client-id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The JMS client id for a shared Connection created and used by this container. Note that
								client ids need to be unique among all
								active Connections of the underlying JMS provider. Furthermore, a client id can only be
								assigned if the original ConnectionFactory
								hasn't already assigned one.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="task-executor" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for running the listener threads.
	Default for the message listener container is a SimpleAsyncTaskExecutor.
							]]></xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="java.util.concurrent.Executor"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="header-mapper" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.integration.jms.JmsHeaderMapper"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="extract-payload" type="xsd:string" default="true"/>
					<xsd:attribute name="send-timeout" type="xsd:string"/>
					<xsd:attribute name="error-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
							<xsd:documentation>
								If a (synchronous) downstream exception is thrown and an error-channel is specified,
								the MessagingException will be sent to this channel. Otherwise, any such exception
								will be propagated to the listener container and any JMS transaction will be
								rolled back. Any synchronous downstream exceptions in the error flow will
								also cause any JMS transaction to be rolled back.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="transaction-manager" type="xsd:string">
						<xsd:annotation>
							<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="receive-timeout" type="xsd:string"/>

					<xsd:attributeGroup ref="dmlcAttributeGroup"/>

				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Polling Channel Adapter for the
				'org.springframework.integration.jms.JmsDestinationPollingSource'
				for polling a JMS Destination.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="jmsInboundAdapterType">
					<xsd:sequence>
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
					</xsd:sequence>
					<xsd:attribute name="destination" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
								reference, use 'destination-name' and 'pub-sub-domain' which will rely upon the
								DestinationResolver strategy (DynamicDestinationResolver by default).
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="jakarta.jms.Destination"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="destination-name" type="xsd:string"/>
					<xsd:attribute name="pub-sub-domain" type="xsd:string"/>
					<xsd:attribute name="channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="header-mapper" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.integration.jms.JmsHeaderMapper"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="extract-payload" type="xsd:string" default="true"/>
					<xsd:attribute name="receive-timeout" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Timeout for receive calls on the template.
								NOTE: for JmsTemplate, 0 means indefinite while -1 means no-wait.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="session-transacted" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Setting this attribute to true enables transactions. Cannot be specified if
	a jms-template is specified. Default false.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="jms-template" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.jms.core.JmsTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="inbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Messaging Gateway Endpoint for the
				'org.springframework.integration.jms.JmsMessageDrivenEndpoint' to listen for messages in the JMS
				destination and produce replies.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="jmsMessageDrivenInboundAdapterType">
					<xsd:attribute name="request-destination" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
								reference, use 'request-destination-name' and 'request-pub-sub-domain' which will rely
								upon the DestinationResolver strategy (DynamicDestinationResolver by default).
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="jakarta.jms.Destination"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="request-destination-name" type="xsd:string"/>
					<xsd:attribute name="request-pub-sub-domain" type="xsd:string"/>
					<xsd:attribute name="default-reply-destination" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
								reference, use either 'default-reply-queue-name' or 'default-reply-topic-name' which
								will rely upon the DestinationResolver strategy (DynamicDestinationResolver by default).
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="jakarta.jms.Destination"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="default-reply-queue-name" type="xsd:string"/>
					<xsd:attribute name="default-reply-topic-name" type="xsd:string"/>
					<xsd:attribute name="correlation-key" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Provide the name of a JMS property that should be copied from the request
								Message to the reply Message. If NO value is provided for this attribute then the
								JMSMessageID from the request will be copied into the JMSCorrelationID of the reply
								unless there is already a value in the JMSCorrelationID property of the newly created
								reply Message in which case nothing will be copied. If the JMSCorrelationID of the
								request Message should be copied into the JMSCorrelationID of the reply Message
								instead, then this value should be set to "JMSCorrelationID".
								Any other value will be treated as a JMS String Property to be copied as-is
								from the request Message into the reply Message with the same property name.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="header-mapper" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.integration.jms.JmsHeaderMapper"/>
								</tool:annotation>
								<xsd:documentation>
									Allows to specify custom implementation of JmsHeaderMapper to map Message Headers to
									JMS Message.
								</xsd:documentation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="extract-request-payload" type="xsd:string" default="true"/>
					<xsd:attribute name="extract-reply-payload" type="xsd:string" default="true"/>
					<xsd:attribute name="request-channel" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="request-timeout" type="xsd:string"/>
					<xsd:attribute name="reply-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="reply-timeout" type="xsd:string"/>
					<xsd:attribute name="error-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
							<xsd:documentation>
								If a (synchronous) downstream exception is thrown and an "error-channel" is specified,
								the MessagingException will be sent to this channel; any response from
								which will be returned as a reply by the gateway. If an "error-channel" is not
								supplied, any such exception
								will be propagated to the listener container and any JMS transaction will be
								rolled back. Any synchronous downstream exceptions in the error flow will
								also cause any JMS transaction to be rolled back.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="transaction-manager" type="xsd:string">
						<xsd:annotation>
							<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="subscription-durable" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean property indicating whether to make the subscription durable. The durable
								subscription name to be used can be specified
								through the "durableSubscriptionName" property. Default is "false". Set this to "true"
								to register a durable subscription,
								typically in combination with a "durableSubscriptionName" value (unless your message
								listener class name is good enough as
								subscription name). Only makes sense when listening to a topic (pub-sub domain).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-shared" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Boolean property indicating whether to make the subscription shared. The shared
								subscription name to be used can be
								specified through the 'subscription-name' attribute. Default is "false". Set this to
								"true" to register a shared
								subscription, typically in combination with a 'subscription-name' value (unless your
								message listener class name is
								good enough as subscription name). Note that shared subscriptions may also be durable,
								so this flag can
								(and often will) be combined with 'subscription-durable' as well.
								Only makes sense when listening to a topic (pub-sub domain), therefore this
								automatically sets
								'request-pub-sub-domain' to 'true'. Requires a JMS 2.0 compatible message broker.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="subscription-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The name of a subscription to create. To be applied in case of a topic (pub-sub domain)
								with a shared or durable
								subscription. The subscription name needs to be unique within this client's JMS client
								id. Default is the class name
								of the specified message listener.
								Note: Only 1 concurrent consumer (which is the default of the message listener
								container) is allowed for each
								subscription, except for a shared subscription (which requires JMS 2.0).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="client-id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The JMS client id for a shared Connection created and used by this container. Note that
								client ids need to be unique among all
								active Connections of the underlying JMS provider. Furthermore, a client id can only be
								assigned if the original ConnectionFactory
								hasn't already assigned one.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="receive-timeout" type="xsd:string"/>

					<xsd:attributeGroup ref="dmlcAttributeGroup"/>

					<xsd:attribute name="reply-time-to-live" type="xsd:string"/>
					<xsd:attribute name="reply-priority" type="xsd:string"/>
					<xsd:attribute name="reply-delivery-persistent" type="xsd:string"/>
					<xsd:attribute name="explicit-qos-enabled-for-replies" type="xsd:string"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.jms.JmsSendingMessageHandler'
				to send messages to the JMS destination and wait for replies.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="3">
				<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="transactional" type="integration:transactionalType" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
							 minOccurs="0" maxOccurs="1"/>
				<xsd:element name="reply-listener" minOccurs="0" maxOccurs="1">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
	Configures the gateway to use an asynchronous listener container to receive reply
	messages.
						]]></xsd:documentation>
					</xsd:annotation>
					<xsd:complexType>
						<xsd:attribute name="acknowledge">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
			The native JMS acknowledge mode: "auto", "client", "dups-ok" or "transacted".
			The latter effectively activates a locally transacted Session.
								]]></xsd:documentation>
							</xsd:annotation>
							<xsd:simpleType>
								<xsd:union memberTypes="jsmAcknowledgeModeEnumeration xsd:string"/>
							</xsd:simpleType>
						</xsd:attribute>
						<xsd:attributeGroup ref="dmlcAttributeGroup"/>
						<xsd:attribute name="receive-timeout" type="xsd:string"/>
						<xsd:attribute name="task-executor" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
		A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for receiving
		the replies and handing them over to the sending thread.
		Default is a SimpleAsyncTaskExecutor.
								]]></xsd:documentation>
								<xsd:appinfo>
									<tool:annotation kind="ref">
										<tool:expected-type type="java.util.concurrent.Executor"/>
									</tool:annotation>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
			<xsd:attribute name="id" type="xsd:string"/>
			<xsd:attribute name="request-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="receive-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Timeout for the JMS MessageConsumer to receive the JMS reply Message. Default is 5 seconds.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-timeout" type="xsd:string" default="30000">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Allows you to specify how long this gateway will wait for
						the reply message to be sent successfully to the reply channel
						before throwing an exception. This attribute only applies when the
						channel might block, for example when using a bounded queue channel that
						is currently full.

						Also, keep in mind that when sending to a DirectChannel, the
						invocation will occur in the sender's thread. Therefore,
						the failing of the send operation may be caused by other
						components further downstream.

						The "reply-timeout" attribute maps to the "sendTimeout" property of the
						underlying 'MessagingTemplate' instance (org.springframework.integration.core.MessagingTemplate).

						The value is specified in milliseconds.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-destination" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
						reference, use 'request-destination-name' and 'request-pub-sub-domain' which will rely
						upon the DestinationResolver strategy (DynamicDestinationResolver by default). This
						attribute is mutually exclusive with 'request-destination-name' and
						'request-destination-expression'.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="jakarta.jms.Destination"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-destination-name" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Name of a destination to which request messages will be sent. This name will be handled
						by this gateway's DestinationResolver. This attribute is mutually exclusive with
						'request-destination' and 'request-destination-expression'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-destination-expression" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A SpEL expression to be evaluated at runtime against each Spring Integration request Message as
						the root object. The result should be either a Destination instance or a String representing
						the destination name. In the latter case, it will be passed to this adapter's
						DestinationResolver.
						This attribute is mutually exclusive with 'request-destination' and 'request-destination-name'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-pub-sub-domain" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						When resolving a request destination name (rather than a 'request-destination' reference or
						a 'request-destination-expression' that evaluates to a destination),
						a true value here specifies that the DestinationResolver should resolve Topics rather than
						Queues.
						Default is false.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-destination" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
						reference, use 'reply-destination-name' and 'reply-pub-sub-domain' which will rely
						upon the DestinationResolver strategy (DynamicDestinationResolver by default).
						This attribute is mutually exclusive with
						'reply-destination-name' and 'reply-destination-expression'.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="jakarta.jms.Destination"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-destination-name" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Name of a destination which will be used for the replyTo header. This name will be handled
						by this gateway's DestinationResolver. This attribute is mutually exclusive with
						'reply-destination' and 'reply-destination-expression'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-destination-expression" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A SpEL expression to be evaluated at runtime against each Spring Integration request Message as
						the root object. The result should be either a Destination instance or a String representing
						the destination name. In the latter case, it will be passed to this adapter's
						DestinationResolver
						together with the reply-pub-sub-domain attribute.
						This attribute is mutually exclusive with 'reply-destination' and 'reply-destination-name'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="reply-pub-sub-domain" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						When resolving a reply destination name (rather than a 'reply-destination' reference or
						a 'reply-destination-expression' that evaluates to a destination),
						a true value here specifies that the DestinationResolver should resolve Topics rather than
						Queues.
						Default is false.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="correlation-key" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Provide the name of a JMS property that should hold a generated UUID that
						the receiver of the JMS Message would expect to represent the CorrelationID.
						When waiting for the reply Message, a MessageSelector will be configured
						to match this property name and the UUID value that was sent in the request.
						If NO value is provided for this attribute, then the reply consumer's
						MessageSelector will be expecting the JMSCorrelationID to equal the Message ID
						of the request. If you want to store the outbound correlation UUID value in the
						actual "JMSCorrelationID" property, then set this value to "JMSCorrelationID".
						However, any other value will be treated as a JMS String Property.
						Note: when using a <reply-container/> the correlation data includes a UUID
						representing the gateway as well as a message identifier. For this reason, the use of a
						<reply-container/> requires the specification of a 'correlation-key' if an
						explicit reply-destination is provided.
					]]></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
	to Destination objects. Used when a reqest/reply destination name is provided, or
	an expression that resolves to a name. Default is a DynamicDestinationResolver.
				]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.jms.support.destination.DestinationResolver"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="connection-factory" type="xsd:string" default="jmsConnectionFactory">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The name of a ConnectionFactory bean. Default is 'connectionFactory'.
				]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="jakarta.jms.ConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
				</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 between JMS Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
				]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.jms.support.converter.MessageConverter"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="header-mapper" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.integration.jms.JmsHeaderMapper"/>
						</tool:annotation>
						<xsd:documentation>
							A reference to an implementation of JmsHeaderMapper to map Message Headers to JMS Message.
							Default
							is a 'DefaultJmsHeaderMapper'.
						</xsd:documentation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="extract-request-payload" type="xsd:string" default="true">
				<xsd:annotation>
					<xsd:documentation>
						When 'true' (default), this attribute indicates that the JMS Message body will be created
						(by the MessageConverter) from the Spring Integration Message's payload.
						When 'false', the entire Spring Integration Message will be converted to the JMS Message body.
						In both cases, the message headers will be mapped to JMS headers/properties by the HeaderMapper.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="extract-reply-payload" type="xsd:string" default="true">
				<xsd:annotation>
					<xsd:documentation>
						When 'true' (default), this attribute indicates that the payload of the Spring Integration
						reply message will be created from the 'JMS Message' body (by the MessageConverter).
						When 'false', the Spring Integration Message payload will be the entire JMS Message.
						In both cases, the JMS Message headers/properties will be mapped to message headers
						by the HeaderMapper.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="delivery-persistent" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specify a boolean value indicating whether the delivery mode should be
						DeliveryMode.PERSISTENT (true) or DeliveryMode.NON_PERSISTENT (false).
						This setting will only take effect if 'explicit-qos-enabled' is true.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="time-to-live" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specify the message time to live.
						This setting will only take effect if 'explicit-qos-enabled' is true.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="priority" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specify the default priority of the message. Overridden by the message priority
						header, if present; range 0-9
						This setting will only take effect if 'explicit-qos-enabled' is true.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="explicit-qos-enabled" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	Setting this attribute to true enables the use of quality of service attributes - message
	priority, delivery mode, time to live.
					]]></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 gateway is connected as a
	subscriber to a SubscribableChannel.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="requires-reply" type="xsd:string" use="optional" default="true">
				<xsd:annotation>
					<xsd:documentation>
						Specify whether this outbound gateway must return a non-null value. This value is
						'true' by default, and a ReplyRequiredException will be thrown when
						the underlying service returns a null value.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="idle-reply-listener-timeout" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						When using a 'reply-listener', specify whether the container should be started on-demand
						and stopped when idle for this time (in seconds). When omitted (or &lt;= 0), the reply container
						is started/stopped according to the gateway's lifecycle.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="async" type="xsd:string" use="optional">
				<xsd:annotation>
					<xsd:documentation>
						When false (default), the requesting thread is suspended until a reply is received
						or a timeout occurs; when true, the requesting thread is released and the reply
						is returned on the listener container thread. Requires a reply-listener child
						element and a 'correlation-key'; otherwise this property is ignored.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.jms.JmsSendingMessageHandler'
				to send messages to the JMS destination without waiting for replies.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="jmsAdapterType">
					<xsd:choice minOccurs="0" maxOccurs="2">
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
									 minOccurs="0" maxOccurs="1"/>
					</xsd:choice>
					<xsd:attribute name="destination" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A reference to a jakarta.jms.Destination by bean name. As an alternative to a bean
								reference, use 'destination-name' and 'pub-sub-domain' which will rely upon the
								DestinationResolver strategy (DynamicDestinationResolver by default). This attribute
								is mutually exclusive with 'destination-name' and 'destination-expression'.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="jakarta.jms.Destination"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="destination-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Name of the destination to which JMS Messages will be sent. This will be passed to the
								adapter's DestinationResolver. This attribute is mutually exclusive with 'destination'
								and 'destination-expression'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="destination-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A SpEL expression to be evaluated at runtime against each Spring Integration Message as
								the root object. The result should be either a Destination instance or a String
								representing
								the destination name. In the latter case, it will be passed to this adapter's
								DestinationResolver.
								If the evaluation result is null, messages will be sent to the default destination of
								the
								underlying JmsTemplate. This attribute is mutually exclusive with 'destination' and
								'destination-name'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="pub-sub-domain" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								If true, specifies that destination names should resolve to Topics rather than Queues.
								Default is false.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="channel" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="header-mapper" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.integration.jms.JmsHeaderMapper"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="extract-payload" type="xsd:string" default="true"/>
					<xsd:attribute name="jms-template" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.jms.core.JmsTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="delivery-persistent" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Specify a boolean value indicating whether the delivery mode should be
								DeliveryMode.PERSISTENT (true) or DeliveryMode.NON_PERSISTENT (false).
								This setting will only take effect if 'explicit-qos-enabled' is true.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="time-to-live" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Specify the message time to live.
								This setting will only take effect if 'explicit-qos-enabled' is true.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="priority" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Specify the default priority of the message. Overridden by the message priority
								header, if present; range 0-9.
								This setting will only take effect if 'explicit-qos-enabled' is true.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="explicit-qos-enabled" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Setting this attribute to true enables the use of quality of service attributes - message
	priority, delivery mode, time to live.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="session-transacted" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Setting this attribute to true enables transactions for the message send. If there is already
	a JMS transaction in process, perhaps from a message-driven-channel-adapter upstream, the
	same transaction is used; otherwise a new transaction is started. Cannot be specified if
	a jms-template is specified. Default false.
							]]></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 adapter is connected as a
	subscriber to a SubscribableChannel.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="delivery-mode-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A SpEL expression to be evaluated at runtime against each Spring Integration Message as
								the root object. The result should be an integer representing the delivery mode.
								If returns null, falls back to the 'delivery-persistent' or default.
								The explicit-qos-enabled has to be enabled.
								Note: the static delivery mode value can be specified on the JmsTemplate.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="time-to-live-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A SpEL expression to be evaluated at runtime against each Spring Integration Message as
								the root object. The result should be a long representing the time-to-live for the
								message.
								If returns null, falls back to the 'time-to-live' or default.
								The 'explicit-qos-enabled' has to be enabled.
								Note: the static time-to-live value can be specified on the JmsTemplate.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="jmsMessageDrivenInboundAdapterType">
		<xsd:annotation>
			<xsd:documentation>
				Common configuration for message-driven inbound JMS-based adapters.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="jmsInboundAdapterType">
				<xsd:attribute name="container" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
			A reference to a custom listener container implementation.
			Note that a custom container class will typically be a subclass of DefaultMessageListenerContainer.
			This attribute is mutually exclusive with 'container-class'.
						]]></xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type
										type="org.springframework.jms.listener.AbstractMessageListenerContainer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="container-class" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
			A custom listener container implementation class as fully qualified class name.
			Default is Spring's standard DefaultMessageListenerContainer.
			Note that a custom container class will typically be a subclass of this
			standard container class. This attribute is mutually exclusive with 'container'.
						]]></xsd:documentation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-type type="java.lang.Class"/>
								<tool:assignable-to
										type="org.springframework.jms.listener.AbstractMessageListenerContainer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="jmsInboundAdapterType">
		<xsd:annotation>
			<xsd:documentation>
				Common configuration for inbound JMS-based adapters.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="jmsAdapterType">
				<xsd:attribute name="acknowledge">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
	The native JMS acknowledge mode: "auto", "client", "dups-ok" or "transacted".
	The latter effectively activates a locally transacted Session. 'transacted'
	is not allowed on the inbound-channel-adapter; use 'session-transacted' instead.
	acknowlege="transacted" is used on the message-driven-channel-adapter and inbound gateway.
	Defaults to "transacted" when an implicit message listener container is configured.
	Not allowed when using an externally configured listener container; configure the container
	instead.
						]]></xsd:documentation>
					</xsd:annotation>
					<xsd:simpleType>
						<xsd:union memberTypes="jsmAcknowledgeModeEnumeration xsd:string"/>
					</xsd:simpleType>
				</xsd:attribute>
				<xsd:attribute name="selector" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							A JMS Message Selector expression.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:element name="header-enricher">
		<xsd:complexType>
			<xsd:annotation>
				<xsd:documentation>
					Defines a 'org.springframework.integration.transformer.HeaderEnricher' for adding statically
					configured JMS Headers.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:complexContent>
				<xsd:extension base="transformerType">
					<xsd:choice minOccurs="1" maxOccurs="unbounded">
						<xsd:element name="reply-to" type="refOnlyHeaderType">
							<xsd:annotation>
								<xsd:documentation>
									The ReplyTo Destination for the JMS Message.
								</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="correlation-id" type="refOrValueHeaderType">
							<xsd:annotation>
								<xsd:documentation>
									The Correlation ID for the JMS Message.
								</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
					</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:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="refOrValueHeaderType">
		<xsd:complexContent>
			<xsd:extension base="refOnlyHeaderType">
				<xsd:attribute name="value" type="xsd:string"/>
				<xsd:attribute name="expression" type="xsd:string"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="refOnlyHeaderType">
		<xsd:attribute name="ref" type="xsd:string"/>
		<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:complexType name="jmsAdapterType">
		<xsd:annotation>
			<xsd:documentation>
				Common configuration for JMS-based adapters.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:string"/>
		<xsd:attribute name="connection-factory" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="jakarta.jms.ConnectionFactory"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="destination-resolver" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.jms.support.destination.DestinationResolver"/>
					</tool:annotation>
				</xsd:appinfo>
			</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 between JMS Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.jms.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
	</xsd:complexType>

	<xsd:complexType name="transformerType">
		<xsd:attribute name="id" type="xsd:string"/>
		<xsd:attribute name="input-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="output-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:attributeGroup name="dmlcAttributeGroup">
		<xsd:attribute name="concurrent-consumers" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the number of concurrent consumers to create. Default is 1.
					Specifying a higher value for this setting will increase the standard
					level of scheduled concurrent consumers at runtime: This is effectively
					the minimum number of concurrent consumers which will be scheduled
					at any given time. This is a static setting; for dynamic scaling,
					consider specifying the "maxConcurrentConsumers" setting instead.
					Raising the number of concurrent consumers is recommendable in order
					to scale the consumption of messages coming in from a queue. However,
					note that any ordering guarantees are lost once multiple consumers are
					registered
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="max-concurrent-consumers" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the maximum number of concurrent consumers to create. Default is 1.
					If this setting is higher than "concurrentConsumers", the listener container
					will dynamically schedule new consumers at runtime, provided that enough
					incoming messages are encountered. Once the load goes down again, the number of
					consumers will be reduced to the standard level ("concurrentConsumers") again.
					Raising the number of concurrent consumers is recommendable in order
					to scale the consumption of messages coming in from a queue. However,
					note that any ordering guarantees are lost once multiple consumers are
					registered.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="cache-level" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the level of caching that this listener container is allowed to apply:
					CACHE_NONE = 0
					CACHE_CONNECTION = 1
					CACHE_SESSION = 2
					CACHE_CONSUMER = 3
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="max-messages-per-task" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the maximum number of messages to process in one task.
					More concretely, this limits the number of message reception attempts
					per task, which includes receive iterations that did not actually
					pick up a message until they hit their timeout
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>

		<xsd:attribute name="recovery-interval" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Interval in milliseconds between the recovery attempts
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="idle-consumer-limit" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the limit for the number of consumers that are allowed to be idle at any given time.
					This limit is used to determine if a new invoker should be created. Increasing the limit causes
					invokers to be created more aggressively. This can be useful to ramp up the
					number of invokers faster.
					The default is 1, only scheduling a new invoker (which is likely to
					be idle initially) if none of the existing invokers is currently idle.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="idle-task-execution-limit" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the limit for idle executions of a consumer task, not having
					received any message within its execution. If this limit is reached,
					the task will shut down and leave receiving to other executing tasks.
					The default is 1, closing idle resources early once a task didn't
					receive a message.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>

	</xsd:attributeGroup>

	<xsd:simpleType name="cacheLevelEnumeration">
		<xsd:restriction base="xsd:NMTOKEN">
			<xsd:enumeration value="none"/>
			<xsd:enumeration value="connection"/>
			<xsd:enumeration value="session"/>
			<xsd:enumeration value="consumer"/>
			<xsd:enumeration value="auto"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="listenerContainerEnumeration">
		<xsd:restriction base="xsd:NMTOKEN">
			<xsd:enumeration value="default"/>
			<xsd:enumeration value="simple"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="jsmAcknowledgeModeEnumeration">
		<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:schema>
