diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java
index 47cdb13828..fe0cbf4a23 100644
--- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java
+++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java
@@ -18,19 +18,23 @@ package org.springframework.integration.jms;
import java.io.Serializable;
+import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueRequestor;
import javax.jms.QueueSession;
import javax.jms.Session;
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.integration.core.Message;
+import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.endpoint.AbstractReplyProducingMessageConsumer;
import org.springframework.integration.endpoint.ReplyMessageHolder;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.SessionCallback;
import org.springframework.jms.support.converter.MessageConverter;
+import org.springframework.jms.support.converter.SimpleMessageConverter;
import org.springframework.util.Assert;
/**
@@ -38,22 +42,31 @@ import org.springframework.util.Assert;
*
* @author Mark Fisher
*/
-public class JmsOutboundGateway extends AbstractReplyProducingMessageConsumer {
+public class JmsOutboundGateway extends AbstractReplyProducingMessageConsumer implements InitializingBean {
private volatile Queue jmsQueue;
- private volatile JmsTemplate jmsTemplate;
-
private volatile MessageConverter messageConverter;
+ private final JmsTemplate jmsTemplate = new JmsTemplate();
+
public void setJmsQueue(Queue jmsQueue) {
this.jmsQueue = jmsQueue;
}
- public void setJmsTemplate(JmsTemplate jmsTemplate) {
- this.jmsTemplate = jmsTemplate;
- this.messageConverter = new HeaderMappingMessageConverter(jmsTemplate.getMessageConverter());
+ public void setConnectionFactory(ConnectionFactory connectionFactory) {
+ this.jmsTemplate.setConnectionFactory(connectionFactory);
+ }
+
+ public void setReplyChannel(MessageChannel replyChannel) {
+ this.setOutputChannel(replyChannel);
+ }
+
+ public void afterPropertiesSet() {
+ this.jmsTemplate.afterPropertiesSet();
+ Assert.notNull(this.jmsQueue, "jmsQueue must not be null");
+ this.messageConverter = new HeaderMappingMessageConverter(new SimpleMessageConverter());
}
@Override
@@ -63,7 +76,6 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageConsumer {
public Object doInJms(Session session) throws JMSException {
Assert.state(session instanceof QueueSession,
"QueueSession is required for the outbound JMS Gateway");
- Assert.state(jmsQueue != null, "Queue is required");
javax.jms.Message jmsRequest = (messageConverter != null)
? messageConverter.toMessage(requestMessage, session)
: session.createObjectMessage((Serializable) requestMessage);
diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java
index 26521cdec1..3742aa0aa7 100644
--- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java
+++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java
@@ -30,6 +30,7 @@ public class JmsNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
this.registerBeanDefinitionParser("inbound-gateway", new JmsInboundGatewayParser());
this.registerBeanDefinitionParser("inbound-channel-adapter", new JmsInboundChannelAdapterParser());
+ this.registerBeanDefinitionParser("outbound-gateway", new JmsOutboundGatewayParser());
this.registerBeanDefinitionParser("outbound-channel-adapter", new JmsOutboundChannelAdapterParser());
this.registerBeanDefinitionParser("header-enricher", new SimpleHeaderEnricherParser(
JmsHeaders.TRANSPORT_PREFIX, new String[] { "reply-to" }));
diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundGatewayParser.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundGatewayParser.java
new file mode 100644
index 0000000000..54cfb9f30c
--- /dev/null
+++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundGatewayParser.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2002-2008 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.config;
+
+import org.w3c.dom.Element;
+
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.integration.config.xml.AbstractConsumerEndpointParser;
+import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
+import org.springframework.integration.jms.JmsOutboundGateway;
+
+/**
+ * Parser for the <outbound-gateway> element of the integration 'jms' namespace.
+ *
+ * @author Mark Fisher
+ */
+public class JmsOutboundGatewayParser extends AbstractConsumerEndpointParser {
+
+ @Override
+ protected String getInputChannelAttributeName() {
+ return "request-channel";
+ }
+
+ @Override
+ protected BeanDefinitionBuilder parseConsumer(Element element, ParserContext parserContext) {
+ BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(JmsOutboundGateway.class);
+ builder.addPropertyReference("connectionFactory", element.getAttribute("connection-factory"));
+ builder.addPropertyReference("jmsQueue", element.getAttribute("jms-queue"));
+ IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel");
+ return builder;
+ }
+
+}
diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd
index 346ecebdf4..442d837e7f 100644
--- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd
+++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd
@@ -40,7 +40,7 @@
- Defines a JMS-based gateway adapter.
+ Defines an inbound JMS-based Messaging Gateway.
@@ -62,6 +62,23 @@
+
+
+
+ Defines an outbound JMS-based Messaging Gateway.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/jms/outboundGateway.xml b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/jms/outboundGateway.xml
index 3a7c295556..fae3ed5026 100644
--- a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/jms/outboundGateway.xml
+++ b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/jms/outboundGateway.xml
@@ -19,19 +19,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+