1. 添加配置文件
src\META-INF\services\org\apache\activemq\transport\frametranslator\jms-stomp-map-json
class=org.demo.jms.stomp.StompTranslator
2. Java 代码
修改 org\apache\activemq\transport\stomp\LegacyFrameTranslator.java
package org.demo.jms.stomp;
// ...
import org.codehaus.jackson.map.ObjectMapper;
// ...
public class StompTranslator implements FrameTranslator {
// Object -> json
private ObjectMapper objMapper = new ObjectMapper();
public ActiveMQMessage convertFrame(ProtocolConverter converter, StompFrame command) throws JMSException, ProtocolException {
// ...
if (headers.containsKey(Stomp.Headers.AMQ_MESSAGE_TYPE)) {
String intendedType = (String)headers.get(Stomp.Headers.AMQ_MESSAGE_TYPE);
if(intendedType.equalsIgnoreCase("text")){
// ...
} else if(intendedType.equalsIgnoreCase("bytes")) {
// ...
} else if (intendedType.equalsIgnoreCase("map")) {
// modify start [stompFrame to map]
ActiveMQMapMessage mapMsg = new ActiveMQMapMessage();
try {
Map<String,Object> map = objMapper.readValue(command.getBody(), Map.class);
mapMsg.getContentMap().putAll(map);
} catch (Exception e) {
throw new ProtocolException("Map could not bet set: " + e, false, e);
}
msg = mapMsg;
// modify end [stompFrame to map]
} else {
throw new ProtocolException("Unsupported message type '"+intendedType+"'",false);
}
}
// ...
return msg;
}
public StompFrame convertMessage(ProtocolConverter converter, ActiveMQMessage message) throws IOException, JMSException {
// ...
} else if (message.getDataStructureType() == ActiveMQMessage.DATA_STRUCTURE_TYPE &&
AdvisorySupport.ADIVSORY_MESSAGE_TYPE.equals(message.getType())) {
// ...
} else if (message.getDataStructureType() == ActiveMQMapMessage.DATA_STRUCTURE_TYPE) {
// modify start [map to stompFrame]
Map<String, Object> map = new HashMap<String, Object>();
ActiveMQMapMessage msg = (ActiveMQMapMessage)message;
Enumeration<String> nameEnum = msg.getMapNames();
String key;
Object value;
while (nameEnum.hasMoreElements()) {
key = nameEnum.nextElement();
value = msg.getObject(key);
map.put(key, value);
}
// to json
byte[] data = objMapper.writeValueAsBytes(map);
headers.put("dataType", "json");
headers.put("className", "java.util.Map");
headers.put(Stomp.Headers.CONTENT_LENGTH, data.length + "");
command.setContent(data);
// modify end [map to stompFrame]
}
return command;
}
}
分享到:
相关推荐
标签:activemq-stomp-5.10.0-sources.jar,activemq,stomp,5.10.0,sources,jar包下载,依赖包
标签:activemq-stomp-5.10.0.jar,activemq,stomp,5.10.0,jar包下载,依赖包
标签:activemq-stomp-5.9.1.jar,activemq,stomp,5.9.1,jar包下载,依赖包
标签:activemq-stomp-5.8.0.jar,activemq,stomp,5.8.0,jar包下载,依赖包
标签:activemq-stomp-5.9.0.jar,activemq,stomp,5.9.0,jar包下载,依赖包
标签:activemq-stomp-5.10.0-javadoc.jar,activemq,stomp,5.10.0,javadoc,jar包下载,依赖包
标签:activemq-stomp-5.9.0-sources.jar,activemq,stomp,5.9.0,sources,jar包下载,依赖包
标签:activemq-stomp-5.8.0-sources.jar,activemq,stomp,5.8.0,sources,jar包下载,依赖包
标签:activemq-stomp-5.8.0-javadoc.jar,activemq,stomp,5.8.0,javadoc,jar包下载,依赖包
标签:activemq-stomp-5.9.0-javadoc.jar,activemq,stomp,5.9.0,javadoc,jar包下载,依赖包
标签:activemq-stomp-5.9.1-sources.jar,activemq,stomp,5.9.1,sources,jar包下载,依赖包
标签:activemq-stomp-5.9.1-javadoc.jar,activemq,stomp,5.9.1,javadoc,jar包下载,依赖包
activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载
activemq-pool-5.8.0-sources.jar
apache-activemq-5.16.0.zip
赠送jar包:activemq-core-5.7.0.jar; 赠送原API文档:activemq-core-5.7.0-javadoc.jar; 赠送源代码:activemq-core-5.7.0-sources.jar; 包含翻译后的API文档:activemq-core-5.7.0-javadoc-API文档-中文...
赠送jar包:activemq-protobuf-1.1.jar; 赠送原API文档:activemq-protobuf-1.1-javadoc.jar; 赠送源代码:activemq-protobuf-1.1-sources.jar; 包含翻译后的API文档:activemq-protobuf-1.1-javadoc-API文档-...
apache-activemq-5.9.0-bin.zip
apache-activemq-5.8.0-bin.zip
activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的。其实activemq-web-console完全可以和activemq-broker分开来部署。 activemq-web-console包含3个apps, 1.一...