<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/ip"
			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/ip"
			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 IP adapters.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="udp-inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.ip.udp.UnicastReceivingChannelAdapter' for receiving incoming udp
				packets.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="udpInboundAdapterType">
					<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:documentation>
								The channel to produce messages from this adapter.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<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 simply be logged by the channel adapter.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="udp-outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.ip.udp.UnicastSendingMessageHandler' to send UDP packets.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="udpAdapterType">
					<xsd:all>
						<xsd:element ref="integration:poller" minOccurs="0"/>
						<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
									 minOccurs="0" maxOccurs="1"/>
					</xsd:all>
					<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:documentation>
								The channel to produce messages from this adapter.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="host" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The UDP host to connect to.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="destination-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A SpEL expression to determine the destination address for the datagram packet
								at runtime. The 'requestMessage' is used as a root object for evaluation context.
								Must evaluate to 'URI', or 'String' in the URI style or 'SocketAddress'.
								The 'IpHeaders.PACKET_ADDRESS' header from the received message throughout
								'udp-inbound-channel-adapter' can be used with this expression as well.
								Mutually exclusive with 'host'/'port' pair.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="acknowledge" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								If true, packets will request acknowledgment.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="socket-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								A SpEL expression to be evaluated to determine which datagram
								socket use for sending outgoing UDP packets (e.g. UDP inbound
								packet receiving Channel Adapter socket can be used).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="ack-host" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The host to which acks should be sent. Required if 'acknowledge' is true.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="ack-port" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								The port to which acks should be sent.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="ack-timeout" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								How long we will wait (milliseconds) for the ack.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="min-acks-for-success" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								If 'acknowledge' is true; how many acks needed for success.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="time-to-live" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Set the underlying {@link MulticastSocket} time to live property.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="task-executor" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Specifies a specific Executor to be used for handling acknowledgments in
								the UDP adapter. If not supplied, an internal
								pooled executor will be used. Needed on some platforms that require
								the use of specific
								task executors such as a WorkManagerTaskExecutor.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="order">
						<xsd:annotation>
							<xsd:documentation>
								Specifies the order for invocation when this
								endpoint is connected as a
								subscriber to a SubscribableChannel.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="tcp-inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.ip.tcp.TcpReceivingChannelAdapter' for receiving incoming tcp packets.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<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="org.springframework.integration.ip.tcp.connection.ConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A connection factory is needed by an inbound adapter. If the
						connection factory has a type 'server',
						the factory is 'owned' by this adapter. If it has a type 'client', it
						is owned by an outbound channel
						adapter and this adapter will receive any incoming messages on the
						connection created by the outbound
						adapter.
					</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="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 simply be logged by the channel adapter.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="client-mode" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						If set to true, causes the adapter to act as a client with respect
						to
						establishing the connection, rather than listening for incoming connections.
						Requires a type="client" connection factory, with single-use set
						to false.
						Defaults to false.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attributeGroup ref="clientModeAttributeGroup"/>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="tcp-outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.ip.tcp.TcpSendingMessageHandler' for sending TCP packets.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:all>
				<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
							 minOccurs="0" maxOccurs="1"/>
			</xsd:all>
			<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="org.springframework.integration.ip.tcp.connection.ConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A connection factory is needed by an outbound adapter. If the
						connection factory has a type 'client',
						the factory is 'owned' by this adapter. If it has a type 'server', it
						is owned by an inbound channel
						adapter and this adapter will attempt to correlate messages to the
						connection on which an original
						inbound message was received.
					</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="order">
				<xsd:annotation>
					<xsd:documentation>
						Specifies the order for invocation when this endpoint is connected as a
						subscriber to a SubscribableChannel.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="client-mode" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						If set to true, causes the adapter to establish a connection when
						started,
						rather than when the first message is sent.
						Requires a type="client" connection factory, with single-use set to false.
						Defaults to false.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attributeGroup ref="clientModeAttributeGroup"/>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="tcp-inbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Messaging Gateway Endpoint for the
				'org.springframework.integration.ip.tcp.TcpInboundGateway' for receiving incoming TCP packets
				and producing replies for them.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<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="org.springframework.integration.ip.tcp.connection.AbstractServerConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A connection factory is needed by an inbound adapter. The
						connection factory must be of type 'server'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<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="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:annotation>
					<xsd:documentation>
						Set the timeout value for receiving reply messages.
						If not explicitly configured, the default is one second.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<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 and the ultimate
						response
						of the error flow will be returned as a response by the gateway. If
						no
						"error-channel" is specified, any such exception
						will simply be logged by the gateway. In such a situation, no response
						is sent
						to the client.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="client-mode" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						If set to true, causes the gateway to act as a client with respect
						to
						establishing the connection, rather than listening for incoming connections.
						Requires a type="client" connection factory, with single-use set
						to false.
						Defaults to false.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attributeGroup ref="clientModeAttributeGroup"/>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="tcp-outbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.ip.tcp.TcpOutboundGateway' for sending TCP packets
				and waiting for replies.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:all>
				<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:all>
			<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="org.springframework.integration.ip.tcp.connection.ConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A connection factory is needed by an outbound adapter. The
						connection factory must be of 'client'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<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="request-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						When using a shared socket, specifies the time the gateway will wait
						to get access to the socket to send the request.
					</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="remote-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specifies the time the gateway will wait for a reply
						from the remote system. Prior to 2.2, this was specified
						with the reply-timeout attribute. To provide easier migration,
						this attribute defaults to the same value of the reply-timeout,
						if supplied, or 10 seconds otherwise. Mutually exclusive with
						'remote-timeout-expression'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="remote-timeout-expression" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specifies an expression that is evaluated against the outbound message
						to determine the time the gateway will wait for a reply
						from the remote system. Mutually exclusive with
						'remote-timeout'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="order">
				<xsd:annotation>
					<xsd:documentation>
						Specifies the order for invocation when this endpoint is connected as a
						subscriber to a SubscribableChannel.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="close-stream-after-send" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Close the output stream after sending the message; this signals
						EOF to the server while keeping the connection open to receive
						the reply. Requires 'single-use' set to 'true'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="async" default="false">
				<xsd:annotation>
					<xsd:documentation>
						Set to true for async request/reply - see reference manual.
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:boolean xsd:string"/>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="tcp-connection-factory">
		<xsd:annotation>
			<xsd:documentation>
				Defines a 'org.springframework.integration.ip.tcp.connection.ConnectionFactory' implementation bean.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="id" type="xsd:string"/>
			<xsd:attribute name="type">
				<xsd:annotation>
					<xsd:documentation>
						Connection factories can be 'client' or 'server'. Client factories
						open a connection to a server using a host and port. Server factories
						listen on a port and create a separate connection for each
						incoming
						connection request.
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="client"/>
						<xsd:enumeration value="server"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="host" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The host to which a client connection factory will connect.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="port" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						For client factories, the port to which a client connection factory
						will connect.
						For server factories, the port on which the factory will listen for
						incoming
						connections.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="using-nio" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						If true, the factory will use java.nio.channel.SocketChannel for
						communication;
						for a large number of connections on the server side, this can
						provide better
						performance and may use fewer threads.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-keep-alive" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Enable/disable 'SocketOptions.SO_KEEPALIVE SO_KEEPALIVE'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-linger" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The 'SocketOptions.SO_LINGER SO_LINGER' in seconds.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-receive-buffer-size" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The 'SocketOptions.SO_RCVBUF SO_RCVBUF' value.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-send-buffer-size" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The 'SocketOptions.SO_SNDBUF SO_SNDBUF' value.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-tcp-no-delay" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Enable/disable 'SocketOptions.TCP_NODELAY TCP_NODELAY' (disable/enable Nagle's algorithm).
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Enable/disable 'SocketOptions.SO_TIMEOUT SO_TIMEOUT' with the specified timeout, in milliseconds.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="so-traffic-class" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Sets traffic class or type-of-service octet in the IP header for packets sent from this Socket.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="using-direct-buffers" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						If true, instructs the factory to use direct buffers if possible;
						only applies if
						using-nio is true. Refer to ByteBuffer javadocs for more information.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="single-use" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						If true, a new connection will be created for each use. For inbound
						adapters
						where there is no outbound adapter sharing the factory, the connection
						will
						be closed after a message is received. For outbound adapters where
						there is
						no inbound adapter sharing the factory, or for inbound adapters
						where an
						outbound adapter shares the factory, the connection will be closed after
						so-timeout milliseconds. For outbound adapters where an inbound
						adapter shares
						the factory, the connection will be closed after a response is
						received.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="serializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.core.serializer.Serializer"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A Serializer that converts message payloads
						to/from output streams/input streams
						associated with the
						connection. Default is ByteArrayCrLfSerializer. Serializer and
						Deserializer
						would normally be the same but this is not required.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="deserializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.core.serializer.Deserializer"/>
						</tool:annotation>
					</xsd:appinfo>
					<xsd:documentation>
						A Deserializer that converts message payloads to/from output
						streams/input streams
						associated with the connection. Default is ByteArrayCrLfSerializer.
						Serializer and Deserializer
						would normally be the same but this is not required.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="local-address" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						On a multi-homed system, specifies the ip address of the network
						interface used to communicate.
						For inbound adapters and gateways, specifies the interface used to
						listen for incoming connections.
						If omitted, the endpoint will listen on all available adapters. For
						the UDP multicast outbound adapter
						specifies the interface to which multicast packets will be sent. For UDP
						unicast and multicast
						adapters, specifies which interface to which the acknowledgment socket will
						be bound. Does not
						apply to TCP outbound adapters and gateways.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="task-executor" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A task executor for managing connections; if not specified a
						cached thread pool task executor is used.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="backlog" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Specifies the connection backlog for server sockets. Does not
						apply to client factories.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="lookup-host" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Whether to perform a DNS reverse-lookup on the remote ip address to
						insert the host name into the
						message headers (ip_connectionId, ip_hostName). Default "false".
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="interceptor-factory-chain" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="apply-sequence" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						When set to "true", adds sequenceNumber and correlationId headers to
						messages originating from
						connections created by this factory. Facilitates resequencing if necessary.
						Default "false".
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="ssl-context-support" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpSSLContextSupport strategy implementation.
						Providing this reference
						enables SSL on connections created by this factory. A
						DefaultTcpSSLContextSupport implementation
						is provided that takes keystore and trustore names and passwords.
						The SSLContext created by
						this implementation is used to obtain socket factories (when
						using-nio="false") or SSLEngine
						instances (when using-nio="true"). When this attribute is omitted, normal
						plain text
						sockets are used.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpSSLContextSupport"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="ssl-handshake-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The timeout (in seconds) to use while performing handshakes on SSL sockets;
						only applies when 'using-nio' is 'true'. Default: 30.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="socket-support" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpSocketSupport strategy implementation. Allows
						post-processing Socket
						and ServerSocket instances after creation and after configured
						attributes are applied.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpSocketSupport"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="socket-factory-support" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpSocketFactorySupport strategy implementation.
						Allows customization
						of the factories used to create sockets. The default implementation
						returns default.
						ServerSocketFactory and SocketFactory instances, unless an 'ssl-context-support'
						attribute has been supplied, in which case the SSLContext obtained
						therefrom is
						used to create SSLServerSocketFactory and SSLSocketFactory instances.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpSocketFactorySupport"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="nio-connection-support" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpNioConnectionSupport strategy implementation.
						When 'using-nio' is true, this is used to create connection objects.
						Two default implementations are provided 'DefaultTcpNioConnectionSupport'
						and 'DefaultTcpNioSSLConnectionSupport' depending on whether SSL is in
						use of not.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpNioConnectionSupport"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="net-connection-support" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpNetConnectionSupport strategy implementation.
						When 'using-nio' is false, this is used to create connection objects.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpNetConnectionSupport"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="mapper" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a TcpMessageMapper implementation. Allows
						customization of headers in inbound messages by overriding
						setCustomHeaders(). Default is TcpMessageMapper.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.ip.tcp.connection.TcpMessageMapper"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="read-delay" type="xsd:string" default="100">
				<xsd:annotation>
					<xsd:documentation>
						The delay (in milliseconds) before retrying a read after the previous attempt
						failed due to insufficient threads. Default 100.
						Only applies when 'using-nio' is true.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="connect-timeout" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						For client factories, the amount of time to wait for a connection to
						be established.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="udpInboundAdapterType">
		<xsd:complexContent>
			<xsd:extension base="udpAdapterType">
				<xsd:attribute name="pool-size" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							The number of threads that will be used for socket/channel handling.
							Only applies
							if an external task-executor is NOT being used. When using an
							external task executor,
							its configuration specifies the number of threads.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="receive-buffer-size" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							The size of the buffer used to receive 'DatagramPackets'.
							Usually set to the maximum transmission unit (MTU) size.
							If a smaller buffer is used than the size of the sent packet, truncation can occur.
							You can detect this by using the 'check-length' attribute.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="multicast-address" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							When multicast is true, the multicast address to which the adapter joins.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="task-executor" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Specifies a specific Executor to be used for socket handling. If not
							supplied, an internal
							pooled executor will be used (See pool-size). Needed on some platforms
							that require the use of specific
							task executors such as a WorkManagerTaskExecutor.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="lookup-host" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Whether to do a DNS reverse-lookup on the remote ip address to
							insert the host name into the
							message headers (ip_hostName). Default "false".
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="udpAdapterType">
		<xsd:annotation>
			<xsd:documentation>
				Common configuration for UDP-based adapters.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="common-attributes">
				<xsd:attribute name="check-length" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Whether a UDP adapter expects a data length field in the packet received.
							Used to detect packet truncation.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="multicast" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Whether the UDP adapter uses multicast.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="socket-customizer" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							A 'SocketCustomizer' bean.
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.integration.ip.udp.SocketCustomizer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="common-attributes">
		<xsd:attribute name="id" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The channel adapter (or gateway) bean name.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="port" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The port for connection.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="so-receive-buffer-size" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The 'SO_RCVBUF' option of the `DatagramSocket`.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="so-send-buffer-size" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The 'SO_SNDBUF' option of the 'DatagramSocket'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="so-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Enable/disable 'SO_TIMEOUT' with the specified timeout, in milliseconds.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="local-address" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					On a multi-homed system, specifies the ip address of the network
					interface used to communicate.
					For inbound adapters and gateways, specifies the interface used to
					listen for incoming connections.
					If omitted, the endpoint will listen on all available adapters. For
					the UDP multicast outbound adapter
					specifies the interface to which multicast packets will be sent. For UDP
					unicast and multicast
					adapters, specifies which interface to which the acknowledgment socket will
					be bound. Does not
					apply to TCP outbound adapters and gateways.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:attributeGroup name="clientModeAttributeGroup">
		<xsd:attribute name="retry-interval" type="xsd:string" default="60000">
			<xsd:annotation>
				<xsd:documentation>
					When in client mode, specifies the retry interval, in milliseconds, if
					a connection
					cannot be established. Defaults to 60000.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="scheduler" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					When in client mode,
					provide a reference to the
					TaskScheduler instance to
					be used for establishing connections. 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="org.springframework.scheduling.TaskScheduler"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>
</xsd:schema>
