Author: davsclaus Date: Fri Feb 25 07:38:37 2011 New Revision: 1074420 URL: http://svn.apache.org/viewvc?rev=1074420&view=rev Log: CAMEL-3718: Fixed OracleAQ not supporting JMSReplyTo and thrown exception on accessing.
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java 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/EndpointMessageListener.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java?rev=1074420&r1=1074419&r2=1074420&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java Fri Feb 25 07:38:37 2011 @@ -317,13 +317,7 @@ public class EndpointMessageListener imp // lets send a response back if we can Object destination = getReplyToDestination(); if (destination == null) { - try { - destination = message.getJMSReplyTo(); - } catch (JMSException e) { - if (LOG.isDebugEnabled()) { - LOG.debug("Cannot read JMSReplyTo header. Will ignore this exception.", e); - } - } + destination = JmsMessageHelper.getJMSReplyTo(message); } return destination; } Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=1074420&r1=1074419&r2=1074420&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Fri Feb 25 07:38:37 2011 @@ -175,18 +175,8 @@ public class JmsBinding { map.put("JMSRedelivered", jmsMessage.getJMSRedelivered()); map.put("JMSTimestamp", jmsMessage.getJMSTimestamp()); - // to work around OracleAQ not supporting the JMSReplyTo header (CAMEL-2909) - try { - map.put("JMSReplyTo", jmsMessage.getJMSReplyTo()); - } catch (JMSException e) { - LOG.trace("Cannot read JMSReplyTo header. Will ignore this exception.", e); - } - // to work around OracleAQ not supporting the JMSType header (CAMEL-2909) - try { - map.put("JMSType", jmsMessage.getJMSType()); - } catch (JMSException e) { - LOG.trace("Cannot read JMSType header. Will ignore this exception.", e); - } + map.put("JMSReplyTo", JmsMessageHelper.getJMSReplyTo(jmsMessage)); + map.put("JMSType", JmsMessageHelper.getJMSType(jmsMessage)); // this works around a bug in the ActiveMQ property handling map.put("JMSXGroupID", jmsMessage.getStringProperty("JMSXGroupID")); @@ -324,7 +314,8 @@ public class JmsBinding { // if the value is a String we must normalize it first headerValue = normalizeDestinationName((String) headerValue); } - jmsMessage.setJMSReplyTo(ExchangeHelper.convertToType(exchange, Destination.class, headerValue)); + Destination replyTo = ExchangeHelper.convertToType(exchange, Destination.class, headerValue); + JmsMessageHelper.setJMSReplyTo(jmsMessage, replyTo); } else if (headerName.equals("JMSType")) { jmsMessage.setJMSType(ExchangeHelper.convertToType(exchange, String.class, headerValue)); } else if (headerName.equals("JMSPriority")) { Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java?rev=1074420&r1=1074419&r2=1074420&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java Fri Feb 25 07:38:37 2011 @@ -20,7 +20,7 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; - +import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; @@ -167,4 +167,51 @@ public final class JmsMessageHelper { return destination; } } + + /** + * Sets the JMSReplyTo on the message. + * + * @param message the message + * @param replyTo the reply to destination + */ + public static void setJMSReplyTo(Message message, Destination replyTo) { + try { + message.setJMSReplyTo(replyTo); + } catch (Exception e) { + // ignore due OracleAQ does not support accessing JMSReplyTo + } + } + + /** + * Gets the JMSReplyTo from the message. + * + * @param message the message + * @return the reply to, can be <tt>null</tt> + */ + public static Destination getJMSReplyTo(Message message) { + try { + return message.getJMSReplyTo(); + } catch (Exception e) { + // ignore due OracleAQ does not support accessing JMSReplyTo + } + + return null; + } + + /** + * Gets the JMSType from the message. + * + * @param message the message + * @return the type, can be <tt>null</tt> + */ + public static String getJMSType(Message message) { + try { + return message.getJMSType(); + } catch (Exception e) { + // ignore due OracleAQ does not support accessing JMSType + } + + return null; + } + } 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=1074420&r1=1074419&r2=1074420&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 Feb 25 07:38:37 2011 @@ -148,7 +148,7 @@ public class JmsProducer extends Default if (replyTo == null) { throw new RuntimeExchangeException("Failed to resolve replyTo destination", exchange); } - message.setJMSReplyTo(replyTo); + JmsMessageHelper.setJMSReplyTo(message, replyTo); replyManager.setReplyToSelectorHeader(in, message); String correlationId = determineCorrelationId(message, provisionalCorrelationId); @@ -227,13 +227,13 @@ public class JmsProducer extends Default // there is a JMSReplyTo from the header/endpoint and // we have been told to preserveMessageQos - Object jmsReplyTo = answer.getJMSReplyTo(); + Object jmsReplyTo = JmsMessageHelper.getJMSReplyTo(answer); if (endpoint.isDisableReplyTo()) { // honor disable reply to configuration if (LOG.isDebugEnabled()) { LOG.debug("ReplyTo is disabled on endpoint: " + endpoint); } - answer.setJMSReplyTo(null); + JmsMessageHelper.setJMSReplyTo(answer, null); } else { // if the binding did not create the reply to then we have to try to create it here if (jmsReplyTo == null) { @@ -296,10 +296,10 @@ public class JmsProducer extends Default if (LOG.isDebugEnabled()) { LOG.debug("Using JMSReplyTo destination: " + replyTo); } - answer.setJMSReplyTo(replyTo); + JmsMessageHelper.setJMSReplyTo(answer, replyTo); } else { // do not use JMSReplyTo - answer.setJMSReplyTo(null); + JmsMessageHelper.setJMSReplyTo(answer, null); } return answer;