/* * Copyright 2016-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.integration.jms.dsl; import java.util.function.Consumer; import javax.jms.Destination; import org.springframework.integration.dsl.MessagingGatewaySpec; import org.springframework.integration.jms.ChannelPublishingJmsMessageListener; import org.springframework.integration.jms.JmsHeaderMapper; import org.springframework.integration.jms.JmsInboundGateway; import org.springframework.jms.listener.AbstractMessageListenerContainer; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.destination.DestinationResolver; import org.springframework.util.Assert; /** * A {@link MessagingGatewaySpec} for a {@link JmsInboundGateway}. * * @param <S> the target {@link JmsInboundGatewaySpec} implementation type. * * @author Artem Bilan * @since 5.0 */ public class JmsInboundGatewaySpec<S extends JmsInboundGatewaySpec<S>> extends MessagingGatewaySpec<S, JmsInboundGateway> { JmsInboundGatewaySpec(AbstractMessageListenerContainer listenerContainer) { super(new JmsInboundGateway(listenerContainer, new ChannelPublishingJmsMessageListener())); this.target.getListener().setExpectReply(true); } /** * @param defaultReplyDestination the defaultReplyDestination * @return the spec. * @see ChannelPublishingJmsMessageListener#setDefaultReplyDestination(Destination) */ public S defaultReplyDestination(Destination defaultReplyDestination) { this.target.getListener().setDefaultReplyDestination(defaultReplyDestination); return _this(); } /** * @param destinationName the destinationName * @return the spec. * @see ChannelPublishingJmsMessageListener#setDefaultReplyQueueName(String) */ public S defaultReplyQueueName(String destinationName) { this.target.getListener().setDefaultReplyQueueName(destinationName); return _this(); } /** * @param destinationName the destinationName * @return the spec. * @see ChannelPublishingJmsMessageListener#setDefaultReplyTopicName(String) */ public S defaultReplyTopicName(String destinationName) { this.target.getListener().setDefaultReplyTopicName(destinationName); return _this(); } /** * @param replyTimeToLive the replyTimeToLive * @return the spec. * @see ChannelPublishingJmsMessageListener#setReplyTimeToLive(long) */ public S replyTimeToLive(long replyTimeToLive) { this.target.getListener().setReplyTimeToLive(replyTimeToLive); return _this(); } /** * @param replyPriority the replyPriority * @return the spec. * @see ChannelPublishingJmsMessageListener#setReplyPriority(int) */ public S replyPriority(int replyPriority) { this.target.getListener().setReplyPriority(replyPriority); return _this(); } /** * @param replyDeliveryPersistent the replyDeliveryPersistent * @return the spec. * @see ChannelPublishingJmsMessageListener#setReplyDeliveryPersistent(boolean) */ public S replyDeliveryPersistent(boolean replyDeliveryPersistent) { this.target.getListener().setReplyDeliveryPersistent(replyDeliveryPersistent); return _this(); } /** * @param correlationKey the correlationKey * @return the spec. * @see ChannelPublishingJmsMessageListener#setCorrelationKey(String) */ public S correlationKey(String correlationKey) { this.target.getListener().setCorrelationKey(correlationKey); return _this(); } /** * @param explicitQosEnabledForReplies the explicitQosEnabledForReplies. * @return the spec. * @see ChannelPublishingJmsMessageListener#setExplicitQosEnabledForReplies(boolean) */ public S explicitQosEnabledForReplies(boolean explicitQosEnabledForReplies) { this.target.getListener().setExplicitQosEnabledForReplies(explicitQosEnabledForReplies); return _this(); } /** * @param destinationResolver the destinationResolver. * @return the spec. * @see ChannelPublishingJmsMessageListener#setDestinationResolver(DestinationResolver) */ public S destinationResolver(DestinationResolver destinationResolver) { this.target.getListener().setDestinationResolver(destinationResolver); return _this(); } /** * @param messageConverter the messageConverter. * @return the spec. * @see ChannelPublishingJmsMessageListener#setMessageConverter(MessageConverter) */ public S jmsMessageConverter(MessageConverter messageConverter) { this.target.getListener().setMessageConverter(messageConverter); return _this(); } /** * @param headerMapper the headerMapper. * @return the spec. * @see ChannelPublishingJmsMessageListener#setHeaderMapper(JmsHeaderMapper) */ public S setHeaderMapper(JmsHeaderMapper headerMapper) { this.target.getListener().setHeaderMapper(headerMapper); return _this(); } /** * @param extractRequestPayload the extractRequestPayload. * @return the spec. * @see ChannelPublishingJmsMessageListener#setExtractRequestPayload(boolean) */ public S extractRequestPayload(boolean extractRequestPayload) { this.target.getListener().setExtractRequestPayload(extractRequestPayload); return _this(); } /** * @param extractReplyPayload the extractReplyPayload. * @return the spec. * @see ChannelPublishingJmsMessageListener#setExtractReplyPayload(boolean) */ public S extractReplyPayload(boolean extractReplyPayload) { this.target.getListener().setExtractReplyPayload(extractReplyPayload); return _this(); } /** * An {@link AbstractMessageListenerContainer}-based {@link JmsInboundGatewaySpec} extension. * * @param <S> the target {@link JmsListenerContainerSpec} implementation type. * @param <C> the target {@link AbstractMessageListenerContainer} implementation type. */ public static class JmsInboundGatewayListenerContainerSpec<S extends JmsListenerContainerSpec<S, C>, C extends AbstractMessageListenerContainer> extends JmsInboundGatewaySpec<JmsInboundGatewayListenerContainerSpec<S, C>> { private final JmsListenerContainerSpec<S, C> spec; JmsInboundGatewayListenerContainerSpec(JmsListenerContainerSpec<S, C> spec) { super(spec.get()); this.spec = spec; this.spec.get().setAutoStartup(false); } /** * @param destination the destination * @return the spec. * @see JmsListenerContainerSpec#destination(Destination) */ public JmsInboundGatewayListenerContainerSpec<S, C> destination(Destination destination) { this.spec.destination(destination); return _this(); } /** * @param destinationName the destinationName * @return the spec. * @see JmsListenerContainerSpec#destination(String) */ public JmsInboundGatewayListenerContainerSpec<S, C> destination(String destinationName) { this.spec.destination(destinationName); return _this(); } public JmsInboundGatewayListenerContainerSpec<S, C> configureListenerContainer( Consumer<JmsListenerContainerSpec<S, C>> configurer) { Assert.notNull(configurer, "'configurer' must not be null"); configurer.accept(this.spec); return _this(); } } }