<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/kafka"
			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/kafka"
			elementFormDefault="qualified" attributeFormDefault="unqualified">

	<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>
			Defines the configuration elements for the Spring Integration Adapters for Apache Kafka.
		</xsd:documentation>
	</xsd:annotation>

	<xsd:element name="channel">
		<xsd:annotation>
			<xsd:documentation>
				Creates a subscribable channel that is backed by an Apache Kafka topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="subscribableChannelType">
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="pollable-channel">
		<xsd:annotation>
			<xsd:documentation>
				Creates a pollable channel that is backed by an Apache Kafka topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="message-source" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>
								An 'org.springframework.integration.kafka.inbound.KafkaMessageSource' bean reference for
								a pollable channel.
								Mutually exclusive with 'listener-container'.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type
										type="org.springframework.integration.kafka.inbound.KafkaMessageSource"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="publish-subscribe-channel">
		<xsd:annotation>
			<xsd:documentation>
				Creates a subscribable pub/sub channel that is backed by an Apache Kafka topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="subscribableChannelType">
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines the Consumer Endpoint for the KafkaProducerMessageHandler
				that writes the contents of the Message to kafka broker.
			</xsd:documentation>
		</xsd:annotation>

		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="outboundType">
					<xsd:attributeGroup ref="integration:channelAdapterAttributes"/>
					<xsd:attributeGroup ref="kafkaTemplate"/>
					<xsd:attributeGroup ref="headerMapper"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines the Consumer Endpoint for the KafkaProducerMessageHandler
				that writes the contents of the Message to an Apache Kafka broker and receives
				a reply.
			</xsd:documentation>
		</xsd:annotation>

		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="outboundType">
					<xsd:attribute name="id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Unique ID for this adapter.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="kafka-template" use="required" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the ReplyingKafkaTemplate used to publish messages and
								receive replies. The replyTimeout is set on the template.
							]]></xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.kafka.requestreply.ReplyingKafkaTemplate" />
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="request-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
			Message Channel to which Messages should be sent in order to have them sent to the Apache Kafka.
							</xsd:documentation>
							<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="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="reply-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
			Message Channel to which replies should be sent after being received from the Apache Kafka.
							</xsd:documentation>
							<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" 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:attributeGroup ref="headerMapper"/>
				</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.kafka.inbound.KafkaMessageSource'
				for polling an Apache Kafka topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
			</xsd:sequence>
			<xsd:attributeGroup ref="integration:channelAdapterAttributes"/>
			<xsd:attribute name="consumer-factory" use="required" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a ConsumerFactory.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.core.ConsumerFactory"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="consumer-properties" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a ConsumerProperties.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.kafka.listener.ConsumerProperties"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="ack-factory" use="optional" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a ConsumerFactory.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
								type="org.springframework.integration.kafka.inbound.KafkaMessageSource$KafkaAckCallbackFactory"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="message-converter" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						A reference to a RecordMessageConverter; default 'MessagingMessageConverter'.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
								type="org.springframework.kafka.support.converter.RecordMessageConverter"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="payload-type" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						The payload type to which convert the record data; only applies if he message-converter
						type-aware converter, such as a JSON converter.
						Use a SpEL expression, e.g. '#{T(java.lang.String)}'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="raw-header">
				<xsd:annotation>
					<xsd:documentation>
						Set to true to add the raw 'ConsumerRecord' in the 'KafkaHeaders.RAW_DATA' header.
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:int xsd:boolean"/>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="allow-multi-fetch">
				<xsd:annotation>
					<xsd:documentation>
						Allow fetching multiple records per poll.
						IMPORTANT: When true, you must poll the adapter at a sufficient rate to consume
						the number of records received within 'max.poll.interval.ms'.
						When false, you must poll the adapter within 'max.poll.interval.ms'.
						Pausing the adapter will not take effect until the records from the previous poll
						are consumed. Default 'false'.
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:union memberTypes="xsd:boolean xsd:string"/>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="message-driven-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines the Message Producing Endpoint for the KafkaMessageDrivenChannelAdapter.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="inboundType">
					<xsd:attributeGroup ref="integration:channelAdapterAttributes"/>
					<xsd:attribute name="mode" default="record">
						<xsd:annotation>
							<xsd:documentation>
								'record' or 'batch' - default 'record' - one converted ConsumerRecord per message, when
								'batch' then the payload is a collection of converted ConsumerRecords.
							</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="listenerMode xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="send-timeout" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Maximum amount of time in milliseconds to wait when sending a message to the channel
								if such channel may block. For example, a Queue Channel can block until space is available
								if its maximum capacity has been reached.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="record-filter-strategy" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Wrap a 'KafkaMessageDrivenChannelAdapter.IntegrationRecordMessageListener'
								into 'FilteringMessageListenerAdapter' with the provided 'RecordFilterStrategy'.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.kafka.listener.adapter.RecordFilterStrategy" />
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="ack-discarded">
						<xsd:annotation>
							<xsd:documentation>
								A boolean flag to indicate if 'FilteringMessageListenerAdapter
								should acknowledge discarded records or not.
								Does not make sense if 'record-filter-strategy' isn't specified.
							</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:boolean xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="filter-in-retry">
						<xsd:annotation>
							<xsd:documentation>
								A boolean flag to specify the order in which the filter and retry
								operations are performed.
								Does not make sense if only one of 'retry-template' or
								'record-filter-strategy' is present, or none.
								When true, the filter is called for each retry; when false, the filter is only
								 called once for each delivery from the container.
							</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:element name="inbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines the Message Producing Endpoint for the KafkaInboundGateway.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="inboundType">
					<xsd:attribute name="id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Unique ID for this gateway.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
					<xsd:attributeGroup ref="kafkaTemplate"/>
					<xsd:attribute name="request-channel" use="required" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
	Message Channel to which converted Messages should be sent.
							</xsd:documentation>
							<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>
								Maximum amount of time in milliseconds to wait when sending a message to the channel
								if such channel may block. For example, a Queue Channel can block until space is available
								if its maximum capacity has been reached.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="reply-channel" use="optional" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
	Message Channel where reply Messages will be expected.
							</xsd:documentation>
							<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><![CDATA[
	Used to set the receiveTimeout on the underlying MessagingTemplate instance
	(org.springframework.integration.core.MessagingTemplate) for receiving messages
	from the reply channel. If not specified this property will default to "1000"
	(1 second). Only applies if the container thread hands off to another thread
	before the reply is sent.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:simpleType name="listenerMode">
		<xsd:restriction base="xsd:token">
			<xsd:enumeration value="record" />
			<xsd:enumeration value="batch" />
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="channelType">
		<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>
					Unique ID for this Message Channel.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="group-id">
			<xsd:annotation>
				<xsd:documentation>
					Set the 'group.id' KafkaConsumer property.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="kafkaTemplate"/>
	</xsd:complexType>

	<xsd:complexType name="subscribableChannelType">
		<xsd:complexContent>
			<xsd:extension base="channelType">
				<xsd:attribute name="topic" type="xsd:string" use="required">
					<xsd:annotation>
						<xsd:documentation>
							The topic name.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="container-factory" type="xsd:string" use="required">
					<xsd:annotation>
						<xsd:documentation>
							An 'org.springframework.kafka.config.KafkaListenerContainerFactory' bean reference for a
							message-driven (subscribable) channel.
							Mutually exclusive with 'message-source'.
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type
									type="org.springframework.kafka.config.KafkaListenerContainerFactory"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="outboundType">
		<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="topic" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the name of an Apache Kafka topic.
							This attribute is mutually exclusive with 'topic-expression' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="topic-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the expression to determine the name of an Apache Kafka topic
							against the Message at runtime.
							This attribute is mutually exclusive with 'topic' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-key" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the Key for the Kafka record.
							This attribute is mutually exclusive with 'message-key-expression' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-key-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the expression to determine the Key for Kafka record
							against the Message at runtime.
							This attribute is mutually exclusive with 'message-key' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="partition-id" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the target partition for the Kafka record.
							This attribute is mutually exclusive with 'partition-id-expression' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="partition-id-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the expression to determine the partition for Kafka record
							against the Message at runtime.
							This attribute is mutually exclusive with 'partition-id' attribute.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timestamp-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the expression to determine the timestamp for a Kafka record
							against the Message at runtime.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="flush-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the expression to determine whether the producer should be
							flushed after a send. By default the producer is flushed if a
							header 'kafka_flush' has a value 'Boolean.TRUE'.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sync">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Specifies whether to block the sending thread until the producer
					callback has been invoked, indicating the broker has accepted the
					message (or an exception thrown if the send fails). Default: false.
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="send-timeout">
			<xsd:annotation>
				<xsd:documentation>
					Specifies a timeout in milliseconds for how long the 'KafkaProducerMessageHandler'
					should wait wait for send operation results. Defaults to 10 seconds.
					The timeout is applied only in 'sync' mode.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:int xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="send-timeout-expression">
			<xsd:annotation>
				<xsd:documentation>
					Specifies an expression that is evaluated to determine a timeout in milliseconds
					for how long the 'KafkaProducerMessageHandler'
					should wait wait for send operation results. Defaults to 10 seconds.
					The timeout is applied only in 'sync' mode.
				</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:simpleType>
				<xsd:union memberTypes="xsd:int xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="send-failure-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Specifies the channel to which an ErrorMessage for a failed send will be sent.
				]]></xsd:documentation>
				<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="send-success-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Specifies the channel to which message with a payload of type
					'org.apache.kafka.clients.producer.RecordMetadata' will be sent
					after a successful send.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="errorMessageStrategyGroup" />
	</xsd:complexType>

	<xsd:complexType name="inboundType">
		<xsd:attribute name="error-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Message Channel to which error Messages should be sent.
				</xsd:documentation>
				<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="listener-container" use="required" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					An 'org.springframework.kafka.listener.AbstractMessageListenerContainer' bean reference.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.kafka.listener.AbstractMessageListenerContainer"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-converter" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					An 'org.springframework.kafka.support.converter.MessageConverter' bean reference.
					if mode = 'record' must be a 'RecordMessageConverter'; if mode = 'batch' must be
					a `BatchMessageConverter`. Defaults to the default implementation for each mode.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.kafka.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="payload-type" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Set the payload type to convert to when using a type-aware message converter such as the
					StringJsonMessageConverter. Fully qualified class name; defaults to 'java.lang.Object'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="retry-template" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					A retry template for retrying deliveries; an 'error-channel' is not allowed
					when a retry template is provided; configure a 'recovery-callback' such as an
					'ErrorMessageSendingRecoverer' when using a retry template.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.retry.support.RetryTemplate" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="recovery-callback" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Used in conjunction with a 'retry-template'; in most cases this will be
					an 'ErrorMessageSendingRecoverer'. Omitting this element will cause an
					exception to be thrown to the listener container after retries are exhausted.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.retry.RecoveryCallback" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="on-partitions-assigned-seek-callback" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					A 'BiConsumer<Map<TopicPartition, Long>, ConsumerSeekAware.ConsumerSeekCallback>'
					bean reference for seeks management.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.function.BiConsumer" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="bind-source-record">
			<xsd:annotation>
				<xsd:documentation>
					Set to true to bind the source consumer record in the header named
					'IntegrationMessageHeaderAccessor#SOURCE_DATA'.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attributeGroup ref="errorMessageStrategyGroup" />
	</xsd:complexType>

	<xsd:attributeGroup name="errorMessageStrategyGroup">
		<xsd:attribute name="error-message-strategy" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					Specifies the Strategy for building an ErrorMessage.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.support.ErrorMessageStrategy" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="kafkaTemplate">
		<xsd:attribute name="kafka-template" use="required" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the KafkaTemplate used to publish messages.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.kafka.core.KafkaTemplate" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="headerMapper">
		<xsd:attribute name="header-mapper" use="optional" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
							Specifies the HeaderMapper used map Spring message headers to or from Kafka record headers.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.kafka.support.KafkaHeaderMapper" />
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>
</xsd:schema>
