You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/11/14 19:45:41 UTC
svn commit: r595008 -
/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
Author: jstrachan
Date: Wed Nov 14 10:45:40 2007
New Revision: 595008
URL: http://svn.apache.org/viewvc?rev=595008&view=rev
Log:
fix for http://issues.apache.org/activemq/browse/CAMEL-221
Modified:
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
Modified: activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=595008&r1=595007&r2=595008&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original)
+++ activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Wed Nov 14 10:45:40 2007
@@ -33,65 +33,73 @@
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
+import javax.xml.transform.TransformerException;
import org.apache.camel.Exchange;
+import org.apache.camel.converter.jaxp.XmlConverter;
import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.w3c.dom.Node;
/**
* A Strategy used to convert between a Camel {@JmsExchange} and {@JmsMessage}
* to and from a JMS {@link Message}
- *
+ *
* @version $Revision$
*/
public class JmsBinding {
private static final transient Log LOG = LogFactory.getLog(JmsBinding.class);
-
private Set<String> ignoreJmsHeaders;
+ private XmlConverter xmlConverter = new XmlConverter();
/**
* Extracts the body from the JMS message
- *
+ *
* @param exchange
* @param message
*/
public Object extractBodyFromJms(Exchange exchange, Message message) {
try {
if (message instanceof ObjectMessage) {
- ObjectMessage objectMessage = (ObjectMessage)message;
+ ObjectMessage objectMessage = (ObjectMessage) message;
return objectMessage.getObject();
- } else if (message instanceof TextMessage) {
- TextMessage textMessage = (TextMessage)message;
+ }
+ else if (message instanceof TextMessage) {
+ TextMessage textMessage = (TextMessage) message;
return textMessage.getText();
- } else if (message instanceof MapMessage) {
- return createMapFromMapMessage((MapMessage)message);
- } else if (message instanceof BytesMessage || message instanceof StreamMessage) {
+ }
+ else if (message instanceof MapMessage) {
+ return createMapFromMapMessage((MapMessage) message);
+ }
+ else if (message instanceof BytesMessage || message instanceof StreamMessage) {
// TODO we need a decoder to be able to process the message
return message;
- } else {
+ }
+ else {
return null;
}
- } catch (JMSException e) {
+ }
+ catch (JMSException e) {
throw new RuntimeJmsException("Failed to extract body due to: " + e + ". Message: " + message, e);
}
}
/**
* Creates a JMS message from the Camel exchange and message
- *
+ *
* @param session the JMS session used to create the message
* @return a newly created JMS Message instance containing the
* @throws JMSException if the message could not be created
*/
public Message makeJmsMessage(Exchange exchange, org.apache.camel.Message camelMessage, Session session) throws JMSException {
Message answer = null;
- if( camelMessage instanceof JmsMessage ) {
- JmsMessage jmsMessage = (JmsMessage)camelMessage;
+ if (camelMessage instanceof JmsMessage) {
+ JmsMessage jmsMessage = (JmsMessage) camelMessage;
answer = jmsMessage.getJmsMessage();
}
- if( answer == null ) {
+ if (answer == null) {
answer = createJmsMessage(camelMessage.getBody(), session);
appendJmsProperties(answer, exchange, camelMessage);
}
@@ -106,7 +114,7 @@
for (Map.Entry<String, Object> entry : entries) {
String headerName = entry.getKey();
Object headerValue = entry.getValue();
-
+
if (headerName.startsWith("JMS") && !headerName.startsWith("JMSX")) {
if (headerName.equals("JMSCorrelationID")) {
jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, String.class, headerValue));
@@ -135,11 +143,24 @@
}
protected Message createJmsMessage(Object body, Session session) throws JMSException {
+ if (body instanceof Node) {
+ // lets convert the document to a String format
+ try {
+ body = xmlConverter.toString((Node) body);
+ }
+ catch (TransformerException e) {
+ JMSException jmsException = new JMSException(e.getMessage());
+ jmsException.setLinkedException(e);
+ throw jmsException;
+ }
+ }
if (body instanceof String) {
- return session.createTextMessage((String)body);
- } else if (body instanceof Serializable) {
- return session.createObjectMessage((Serializable)body);
- } else {
+ return session.createTextMessage((String) body);
+ }
+ else if (body instanceof Serializable) {
+ return session.createObjectMessage((Serializable) body);
+ }
+ else {
return session.createMessage();
}
}