Author: davsclaus Date: Fri Sep 3 15:56:31 2010 New Revision: 992341 URL: http://svn.apache.org/viewvc?rev=992341&view=rev Log: CAMEL-3102: JmsProducer in InOnly will lookup or create JMSReplyTo destination. This makes it easier to do fire and forget and have a JMSReplyTo header set for the receiver to reply sometime in the future.
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java?rev=992341&r1=992340&r2=992341&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java Fri Sep 3 15:56:31 2010 @@ -231,7 +231,39 @@ public class JmsProducer extends Default MessageCreator messageCreator = new MessageCreator() { public Message createMessage(Session session) throws JMSException { - return endpoint.getBinding().makeJmsMessage(exchange, in, session, null); + Message answer = endpoint.getBinding().makeJmsMessage(exchange, in, session, null); + + // if the binding did not create the reply to then we have to try to create it here + String replyTo = exchange.getIn().getHeader("JMSReplyTo", String.class); + if (replyTo != null && answer.getJMSReplyTo() == null) { + Destination destination = null; + // try using destination resolver to lookup the destination + if (endpoint.getDestinationResolver() != null) { + destination = endpoint.getDestinationResolver().resolveDestinationName(session, replyTo, endpoint.isPubSubDomain()); + } + if (destination == null) { + // okay then fallback and create the queue + if (endpoint.isPubSubDomain()) { + if (LOG.isDebugEnabled()) { + LOG.debug("Creating JMSReplyTo topic: " + replyTo); + } + destination = session.createTopic(replyTo); + } else { + if (LOG.isDebugEnabled()) { + LOG.debug("Creating JMSReplyTo queue: " + replyTo); + } + destination = session.createQueue(replyTo); + } + } + if (destination != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Using JMSReplyTo destination: " + destination); + } + answer.setJMSReplyTo(destination); + } + } + + return answer; } };