You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2008/12/29 10:20:09 UTC
svn commit: r729844 - in /activemq/trunk: ./ activemq-optional/
activemq-optional/src/main/java/org/apache/activemq/util/xstream/
activemq-optional/src/test/java/org/apache/activemq/util/xstream/
Author: dejanb
Date: Mon Dec 29 01:20:09 2008
New Revision: 729844
URL: http://svn.apache.org/viewvc?rev=729844&view=rev
Log:
fix for https://issues.apache.org/activemq/browse/AMQ-1494
Modified:
activemq/trunk/activemq-optional/pom.xml
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/util/xstream/XStreamMessageTransformer.java
activemq/trunk/activemq-optional/src/test/java/org/apache/activemq/util/xstream/XStreamTransformTest.java
activemq/trunk/pom.xml
Modified: activemq/trunk/activemq-optional/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/pom.xml?rev=729844&r1=729843&r2=729844&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/pom.xml (original)
+++ activemq/trunk/activemq-optional/pom.xml Mon Dec 29 01:20:09 2008
@@ -133,6 +133,12 @@
<scope>compile</scope>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/util/xstream/XStreamMessageTransformer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/util/xstream/XStreamMessageTransformer.java?rev=729844&r1=729843&r2=729844&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/util/xstream/XStreamMessageTransformer.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/util/xstream/XStreamMessageTransformer.java Mon Dec 29 01:20:09 2008
@@ -29,6 +29,7 @@
import javax.jms.TextMessage;
import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
@@ -46,6 +47,11 @@
protected MessageTransform transformType;
private XStream xStream;
+
+ /**
+ * Specialized driver to be used with stream readers and writers
+ */
+ private HierarchicalStreamDriver streamDriver;
/**
* Defines the type of transformation. If XML (default), - producer
@@ -109,7 +115,15 @@
this.xStream = xStream;
}
- // Implementation methods
+ public HierarchicalStreamDriver getStreamDriver() {
+ return streamDriver;
+ }
+
+ public void setStreamDriver(HierarchicalStreamDriver streamDriver) {
+ this.streamDriver = streamDriver;
+ }
+
+ // Implementation methods
// -------------------------------------------------------------------------
protected XStream createXStream() {
return new XStream();
@@ -165,7 +179,12 @@
protected String marshall(Session session, ObjectMessage objectMessage) throws JMSException {
Serializable object = objectMessage.getObject();
StringWriter buffer = new StringWriter();
- HierarchicalStreamWriter out = new PrettyPrintWriter(buffer);
+ HierarchicalStreamWriter out;
+ if (streamDriver != null) {
+ out = streamDriver.createWriter(buffer);
+ } else {
+ out = new PrettyPrintWriter(buffer);
+ }
getXStream().marshal(object, out);
return buffer.toString();
}
@@ -175,7 +194,12 @@
* Object
*/
protected Object unmarshall(Session session, TextMessage textMessage) throws JMSException {
- HierarchicalStreamReader in = new XppReader(new StringReader(textMessage.getText()));
+ HierarchicalStreamReader in;
+ if (streamDriver != null) {
+ in = streamDriver.createReader(new StringReader(textMessage.getText()));
+ } else {
+ in = new XppReader(new StringReader(textMessage.getText()));
+ }
return getXStream().unmarshal(in);
}
Modified: activemq/trunk/activemq-optional/src/test/java/org/apache/activemq/util/xstream/XStreamTransformTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/test/java/org/apache/activemq/util/xstream/XStreamTransformTest.java?rev=729844&r1=729843&r2=729844&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/test/java/org/apache/activemq/util/xstream/XStreamTransformTest.java (original)
+++ activemq/trunk/activemq-optional/src/test/java/org/apache/activemq/util/xstream/XStreamTransformTest.java Mon Dec 29 01:20:09 2008
@@ -30,6 +30,8 @@
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQMessageConsumer;
+import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
+
import static org.apache.activemq.util.xstream.XStreamMessageTransformer.MessageTransform.*;
/**
@@ -216,6 +218,87 @@
System.out.println(text);
}
+
+ public void testStreamDriverTransform() throws Exception {
+ XStreamMessageTransformer transformer = new XStreamMessageTransformer(ADAPTIVE);
+ transformer.setStreamDriver(new JettisonMappedXmlDriver());
+ connectionFactory.setTransformer(transformer);
+ connection = connectionFactory.createConnection();
+ connection.start();
+
+ // lets create the consumers
+ Session adaptiveSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Destination destination = adaptiveSession.createTopic(getClass().getName());
+ MessageConsumer adaptiveConsumer = adaptiveSession.createConsumer(destination);
+
+ Session origSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageConsumer origConsumer = origSession.createConsumer(destination);
+ // lets clear the transformer on this consumer so we see the message as
+ // it really is
+ ((ActiveMQMessageConsumer)origConsumer).setTransformer(null);
+
+ // Create producer
+ Session producerSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer producer = producerSession.createProducer(destination);
+
+ Message message;
+ ObjectMessage objectMessage;
+ TextMessage textMessage;
+ SamplePojo body;
+ Object object;
+ String text;
+
+ // Send a text message
+ String xmlText = "{\"org.apache.activemq.util.xstream.SamplePojo\":{\"name\":\"James\",\"city\":\"London\"}}";
+
+ TextMessage txtRequest = producerSession.createTextMessage(xmlText);
+ producer.send(txtRequest);
+
+ // lets consume it as a text message
+ message = adaptiveConsumer.receive(timeout);
+ assertNotNull("Should have received a message!", message);
+ assertTrue("Should be a TextMessage but was: " + message, message instanceof TextMessage);
+ textMessage = (TextMessage)message;
+ text = textMessage.getText();
+ assertTrue("Text should be non-empty!", text != null && text.length() > 0);
+
+ // lets consume it as an object message
+ message = origConsumer.receive(timeout);
+ assertNotNull("Should have received a message!", message);
+ assertTrue("Should be an ObjectMessage but was: " + message, message instanceof ObjectMessage);
+ objectMessage = (ObjectMessage)message;
+ object = objectMessage.getObject();
+ assertTrue("object payload of wrong type: " + object, object instanceof SamplePojo);
+ body = (SamplePojo)object;
+ assertEquals("name", "James", body.getName());
+ assertEquals("city", "London", body.getCity());
+
+ // Send object message
+ ObjectMessage objRequest = producerSession.createObjectMessage(new SamplePojo("James", "London"));
+ producer.send(objRequest);
+
+ // lets consume it as an object message
+ message = adaptiveConsumer.receive(timeout);
+ assertNotNull("Should have received a message!", message);
+ assertTrue("Should be an ObjectMessage but was: " + message, message instanceof ObjectMessage);
+ objectMessage = (ObjectMessage)message;
+ object = objectMessage.getObject();
+ assertTrue("object payload of wrong type: " + object, object instanceof SamplePojo);
+ body = (SamplePojo)object;
+ assertEquals("name", "James", body.getName());
+ assertEquals("city", "London", body.getCity());
+
+ // lets consume it as a text message
+ message = origConsumer.receive(timeout);
+ assertNotNull("Should have received a message!", message);
+ assertTrue("Should be a TextMessage but was: " + message, message instanceof TextMessage);
+ textMessage = (TextMessage)message;
+ text = textMessage.getText();
+ assertTrue("Text should be non-empty!", text != null && text.length() > 0);
+ System.out.println("Received JSON...");
+ System.out.println(text);
+
+ }
protected void tearDown() throws Exception {
if (connection != null) {
Modified: activemq/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/pom.xml?rev=729844&r1=729843&r2=729844&view=diff
==============================================================================
--- activemq/trunk/pom.xml (original)
+++ activemq/trunk/pom.xml Mon Dec 29 01:20:09 2008
@@ -75,7 +75,7 @@
<xalan-version>2.6.0</xalan-version>
<xmlbeans-version>2.0.0-beta1</xmlbeans-version>
<xmlpull-version>1.1.3.4d_b4_min</xmlpull-version>
- <xstream-version>1.3</xstream-version>
+ <xstream-version>1.3.1</xstream-version>
<xbean-version>3.4</xbean-version>
<felix-version>1.0.0</felix-version>
<dist-repo-url>scpexe://people.apache.org/www/people.apache.org/repo/m2-incubating-repository</dist-repo-url>