mirror of https://github.com/apache/activemq.git
https://issues.apache.org/jira/browse/AMQ-2098 - remove mandatory xstream/jettison dependency when using stomp
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1456940 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f87f56294d
commit
1fdcf592b7
|
@ -26,6 +26,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
|
||||||
import org.apache.activemq.advisory.AdvisorySupport;
|
import org.apache.activemq.advisory.AdvisorySupport;
|
||||||
import org.apache.activemq.broker.BrokerContext;
|
import org.apache.activemq.broker.BrokerContext;
|
||||||
import org.apache.activemq.broker.BrokerContextAware;
|
import org.apache.activemq.broker.BrokerContextAware;
|
||||||
|
@ -102,6 +103,7 @@ public class JmsFrameTranslator extends LegacyFrameTranslator implements
|
||||||
@Override
|
@Override
|
||||||
public StompFrame convertMessage(ProtocolConverter converter,
|
public StompFrame convertMessage(ProtocolConverter converter,
|
||||||
ActiveMQMessage message) throws IOException, JMSException {
|
ActiveMQMessage message) throws IOException, JMSException {
|
||||||
|
|
||||||
if (message.getDataStructureType() == ActiveMQObjectMessage.DATA_STRUCTURE_TYPE) {
|
if (message.getDataStructureType() == ActiveMQObjectMessage.DATA_STRUCTURE_TYPE) {
|
||||||
StompFrame command = new StompFrame();
|
StompFrame command = new StompFrame();
|
||||||
command.setAction(Stomp.Responses.MESSAGE);
|
command.setAction(Stomp.Responses.MESSAGE);
|
||||||
|
@ -153,6 +155,10 @@ public class JmsFrameTranslator extends LegacyFrameTranslator implements
|
||||||
FrameTranslator.Helper.copyStandardHeadersFromMessageToFrame(
|
FrameTranslator.Helper.copyStandardHeadersFromMessageToFrame(
|
||||||
converter, message, command, this);
|
converter, message, command, this);
|
||||||
|
|
||||||
|
if (!headers.containsKey(Stomp.Headers.TRANSFORMATION)) {
|
||||||
|
headers.put(Stomp.Headers.TRANSFORMATION, Stomp.Transformations.JMS_ADVISORY_JSON.toString());
|
||||||
|
}
|
||||||
|
|
||||||
if (headers.get(Stomp.Headers.TRANSFORMATION).equals(Stomp.Transformations.JMS_XML.toString())) {
|
if (headers.get(Stomp.Headers.TRANSFORMATION).equals(Stomp.Transformations.JMS_XML.toString())) {
|
||||||
headers.put(Stomp.Headers.TRANSFORMATION, Stomp.Transformations.JMS_ADVISORY_XML.toString());
|
headers.put(Stomp.Headers.TRANSFORMATION, Stomp.Transformations.JMS_ADVISORY_XML.toString());
|
||||||
} else if (headers.get(Stomp.Headers.TRANSFORMATION).equals(Stomp.Transformations.JMS_JSON.toString())) {
|
} else if (headers.get(Stomp.Headers.TRANSFORMATION).equals(Stomp.Transformations.JMS_JSON.toString())) {
|
||||||
|
@ -274,4 +280,16 @@ public class JmsFrameTranslator extends LegacyFrameTranslator implements
|
||||||
public void setBrokerContext(BrokerContext brokerContext) {
|
public void setBrokerContext(BrokerContext brokerContext) {
|
||||||
this.brokerContext = brokerContext;
|
this.brokerContext = brokerContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an Advisory message as a JSON formatted string
|
||||||
|
* @param ds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected String marshallAdvisory(final DataStructure ds) {
|
||||||
|
XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
|
||||||
|
xstream.setMode(XStream.NO_REFERENCES);
|
||||||
|
xstream.aliasPackage("", "org.apache.activemq.command");
|
||||||
|
return xstream.toXML(ds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,25 +16,19 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.transport.stomp;
|
package org.apache.activemq.transport.stomp;
|
||||||
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.jms.Destination;
|
|
||||||
import javax.jms.JMSException;
|
|
||||||
|
|
||||||
import org.apache.activemq.advisory.AdvisorySupport;
|
|
||||||
import org.apache.activemq.command.ActiveMQBytesMessage;
|
import org.apache.activemq.command.ActiveMQBytesMessage;
|
||||||
import org.apache.activemq.command.ActiveMQDestination;
|
import org.apache.activemq.command.ActiveMQDestination;
|
||||||
import org.apache.activemq.command.ActiveMQMessage;
|
import org.apache.activemq.command.ActiveMQMessage;
|
||||||
import org.apache.activemq.command.ActiveMQTextMessage;
|
import org.apache.activemq.command.ActiveMQTextMessage;
|
||||||
import org.apache.activemq.command.DataStructure;
|
|
||||||
import org.apache.activemq.util.ByteArrayOutputStream;
|
import org.apache.activemq.util.ByteArrayOutputStream;
|
||||||
import org.apache.activemq.util.ByteSequence;
|
import org.apache.activemq.util.ByteSequence;
|
||||||
|
|
||||||
import com.thoughtworks.xstream.XStream;
|
import javax.jms.Destination;
|
||||||
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
|
import javax.jms.JMSException;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements ActiveMQ 4.0 translations
|
* Implements ActiveMQ 4.0 translations
|
||||||
|
@ -127,15 +121,8 @@ public class LegacyFrameTranslator implements FrameTranslator {
|
||||||
|
|
||||||
headers.put(Stomp.Headers.CONTENT_LENGTH, Integer.toString(data.length));
|
headers.put(Stomp.Headers.CONTENT_LENGTH, Integer.toString(data.length));
|
||||||
command.setContent(data);
|
command.setContent(data);
|
||||||
} else if (message.getDataStructureType() == ActiveMQMessage.DATA_STRUCTURE_TYPE &&
|
|
||||||
AdvisorySupport.ADIVSORY_MESSAGE_TYPE.equals(message.getType())) {
|
|
||||||
|
|
||||||
FrameTranslator.Helper.copyStandardHeadersFromMessageToFrame(
|
|
||||||
converter, message, command, this);
|
|
||||||
|
|
||||||
String body = marshallAdvisory(message.getDataStructure());
|
|
||||||
command.setContent(body.getBytes("UTF-8"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,15 +199,5 @@ public class LegacyFrameTranslator implements FrameTranslator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an Advisory message as a JSON formatted string
|
|
||||||
* @param ds
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
protected String marshallAdvisory(final DataStructure ds) {
|
|
||||||
XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
|
|
||||||
xstream.setMode(XStream.NO_REFERENCES);
|
|
||||||
xstream.aliasPackage("", "org.apache.activemq.command");
|
|
||||||
return xstream.toXML(ds);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
|
||||||
import org.apache.activemq.ActiveMQPrefetchPolicy;
|
import org.apache.activemq.ActiveMQPrefetchPolicy;
|
||||||
|
import org.apache.activemq.advisory.AdvisorySupport;
|
||||||
import org.apache.activemq.broker.BrokerContext;
|
import org.apache.activemq.broker.BrokerContext;
|
||||||
import org.apache.activemq.broker.BrokerContextAware;
|
import org.apache.activemq.broker.BrokerContextAware;
|
||||||
import org.apache.activemq.command.ActiveMQDestination;
|
import org.apache.activemq.command.ActiveMQDestination;
|
||||||
|
@ -200,19 +201,28 @@ public class ProtocolConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FrameTranslator findTranslator(String header) {
|
protected FrameTranslator findTranslator(String header) {
|
||||||
|
return findTranslator(header, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected FrameTranslator findTranslator(String header, ActiveMQDestination destination) {
|
||||||
FrameTranslator translator = frameTranslator;
|
FrameTranslator translator = frameTranslator;
|
||||||
try {
|
try {
|
||||||
if (header != null) {
|
if (header != null) {
|
||||||
translator = (FrameTranslator) FRAME_TRANSLATOR_FINDER
|
translator = (FrameTranslator) FRAME_TRANSLATOR_FINDER
|
||||||
.newInstance(header);
|
.newInstance(header);
|
||||||
if (translator instanceof BrokerContextAware) {
|
} else {
|
||||||
((BrokerContextAware)translator).setBrokerContext(brokerContext);
|
if (destination != null && AdvisorySupport.isAdvisoryTopic(destination)) {
|
||||||
|
translator = new JmsFrameTranslator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ignore) {
|
} catch (Exception ignore) {
|
||||||
// if anything goes wrong use the default translator
|
// if anything goes wrong use the default translator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (translator instanceof BrokerContextAware) {
|
||||||
|
((BrokerContextAware)translator).setBrokerContext(brokerContext);
|
||||||
|
}
|
||||||
|
|
||||||
return translator;
|
return translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -879,7 +889,7 @@ public class ProtocolConverter {
|
||||||
if (ignoreTransformation == true) {
|
if (ignoreTransformation == true) {
|
||||||
return frameTranslator.convertMessage(this, message);
|
return frameTranslator.convertMessage(this, message);
|
||||||
} else {
|
} else {
|
||||||
return findTranslator(message.getStringProperty(Stomp.Headers.TRANSFORMATION)).convertMessage(this, message);
|
return findTranslator(message.getStringProperty(Stomp.Headers.TRANSFORMATION), message.getDestination()).convertMessage(this, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue