class AmqpItemReaderBuilder<T> {

	private AmqpTemplate amqpTemplate;

	private Class<? extends T> itemType;

	/**
	 * Establish the amqpTemplate to be used by the AmqpItemReader.
	 * @param amqpTemplate the template to be used.
	 * @return this instance for method chaining
	 * @see AmqpItemReader#AmqpItemReader(AmqpTemplate)
	 */
	public AmqpItemReaderBuilder<T> amqpTemplate(AmqpTemplate amqpTemplate) {
		this.amqpTemplate = amqpTemplate;

		return this;
	}

	/**
	 * Establish the itemType for the reader.
	 * @param itemType class type that will be returned by the reader.
	 * @return this instance for method chaining.
	 * @see AmqpItemReader#setItemType(Class)
	 */
	public AmqpItemReaderBuilder<T> itemType(Class<? extends T> itemType) {
		this.itemType = itemType;

		return this;
	}

	/**
	 * Validates and builds a {@link AmqpItemReader}.
	 * @return a {@link AmqpItemReader}
	 */
	public AmqpItemReader<T> build() {<FILL_FUNCTION_BODY>}

}

		Assert.notNull(this.amqpTemplate, "amqpTemplate is required.");

		AmqpItemReader<T> reader = new AmqpItemReader<>(this.amqpTemplate);
		if (this.itemType != null) {
			reader.setItemType(this.itemType);
		}

		return reader;
	
<no_super_class>