You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2015/08/27 12:10:34 UTC
[2/2] activemq git commit: compact byteSequence before xstream
marshall so that only required bytes are base64 encoded
compact byteSequence before xstream marshall so that only required bytes are base64 encoded
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/547476d1
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/547476d1
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/547476d1
Branch: refs/heads/master
Commit: 547476d1bc8bd6d5c824d51bc0dc3cdd5a201f4c
Parents: 950dc92
Author: gtully <ga...@gmail.com>
Authored: Wed Aug 26 11:20:18 2015 +0100
Committer: gtully <ga...@gmail.com>
Committed: Thu Aug 27 11:10:08 2015 +0100
----------------------------------------------------------------------
.../transport/xstream/XStreamWireFormat.java | 28 +++++++++++++++++++-
.../xstream/XStreamWireFormatTest.java | 16 ++++++++++-
2 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/547476d1/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
----------------------------------------------------------------------
diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java b/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
index de437c9..179f90d 100755
--- a/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
+++ b/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
@@ -19,9 +19,16 @@ package org.apache.activemq.transport.xstream;
import java.io.IOException;
import java.io.Reader;
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.ConverterLookup;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import org.apache.activemq.command.MarshallAware;
import org.apache.activemq.command.MessageDispatch;
import org.apache.activemq.transport.util.TextWireFormat;
+import org.apache.activemq.util.ByteSequence;
import org.apache.activemq.wireformat.WireFormat;
import com.thoughtworks.xstream.XStream;
@@ -110,8 +117,27 @@ public class XStreamWireFormat extends TextWireFormat {
// Implementation methods
// -------------------------------------------------------------------------
protected XStream createXStream() {
- XStream xstream = new XStream();
+ final XStream xstream = new XStream();
xstream.ignoreUnknownElements();
+ xstream.registerConverter(new Converter() {
+ final Converter delegate = xstream.getConverterLookup().lookupConverterForType(ByteSequence.class);
+ @Override
+ public void marshal(Object o, HierarchicalStreamWriter hierarchicalStreamWriter, MarshallingContext marshallingContext) {
+ ByteSequence byteSequence = (ByteSequence)o;
+ byteSequence.compact();
+ delegate.marshal(byteSequence, hierarchicalStreamWriter, marshallingContext);
+ }
+
+ @Override
+ public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {
+ return delegate.unmarshal(hierarchicalStreamReader, unmarshallingContext);
+ }
+
+ @Override
+ public boolean canConvert(Class aClass) {
+ return aClass == ByteSequence.class;
+ }
+ });
return xstream;
}
http://git-wip-us.apache.org/repos/asf/activemq/blob/547476d1/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java
----------------------------------------------------------------------
diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java
index daa1468..5a5e611 100755
--- a/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java
+++ b/activemq-http/src/test/java/org/apache/activemq/transport/xstream/XStreamWireFormatTest.java
@@ -18,6 +18,8 @@ package org.apache.activemq.transport.xstream;
import java.io.IOException;
+import junit.framework.Test;
+import org.apache.activemq.command.ActiveMQTextMessage;
import org.apache.activemq.command.Command;
import org.apache.activemq.command.MessageTest;
import org.apache.activemq.wireformat.WireFormat;
@@ -33,7 +35,7 @@ public class XStreamWireFormatTest extends MessageTest {
public void assertBeanMarshalls(Object original) throws IOException {
super.assertBeanMarshalls(original);
- String xml = getXStreamWireFormat().marshalText((Command) original);
+ String xml = getXStreamWireFormat().marshalText(original);
LOG.info(original.getClass().getName() + " as XML is:");
LOG.info(xml);
}
@@ -45,4 +47,16 @@ public class XStreamWireFormatTest extends MessageTest {
protected WireFormat createWireFormat() {
return new XStreamWireFormat();
}
+
+ public static Test suite() {
+ return suite(XStreamWireFormatTest.class);
+ }
+
+ public void testXmlPayload() throws Exception {
+ ActiveMQTextMessage message = new ActiveMQTextMessage();
+ message.setText("<body val=\"Hi\"/>");
+ message.setStringProperty("body","Hi");
+
+ assertBeanMarshalls(message);
+ }
}