package net.lr.karaf.jms.service; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.jms.BytesMessage; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; public class JmsMessage { private Map<String, Object> headers = new HashMap<String, Object>(); private Map<String, Object> properties = new HashMap<String, Object>(); private String content; private String charset = "UTF-8"; private String correlationID; private int deliveryMode; private String destination; private long expiration; private String messageId; private int priority; private boolean redelivered; private String replyTo; private long timestamp; private String type; public JmsMessage(Message message) { try { initFromMessage(message); } catch (JMSException e) { throw new RuntimeException(e.getMessage(), e); } } public void initFromMessage(Message message) throws JMSException { @SuppressWarnings("unchecked") Enumeration<String> names = message.getPropertyNames(); while (names.hasMoreElements()) { String key = names.nextElement(); Object value = message.getObjectProperty(key); properties.put(key, value); } correlationID = message.getJMSCorrelationID(); deliveryMode = message.getJMSDeliveryMode(); Destination destinationDest = message.getJMSDestination(); if (destinationDest != null) { destination = destinationDest.toString(); } expiration = message.getJMSExpiration(); messageId = message.getJMSMessageID(); priority = message.getJMSPriority(); redelivered = message.getJMSRedelivered(); Destination replyToDest = message.getJMSReplyTo(); if (replyToDest != null) { replyTo = replyToDest.toString(); } timestamp = message.getJMSTimestamp(); type = message.getJMSType(); content = getMessageContent(message); } private String getMessageContent(Message message) throws JMSException { if (message instanceof TextMessage) { return ((TextMessage)message).getText(); } else if (message instanceof BytesMessage) { BytesMessage bMessage = (BytesMessage)message; long length = bMessage.getBodyLength(); byte[] content = new byte[(int)length]; bMessage.readBytes(content); try { return new String(content, charset); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage(), e); } } return ""; } public Map<String, Object> getHeaders() { return headers; } public Map<String, Object> getProperties() { return properties; } public String getContent() { return content; } public String getCharset() { return charset; } public String getCorrelationID() { return correlationID; } public int getDeliveryMode() { return deliveryMode; } public String getDestination() { return destination; } public long getExpiration() { return expiration; } public String getMessageId() { return messageId; } public int getPriority() { return priority; } public boolean isRedelivered() { return redelivered; } public String getReplyTo() { return replyTo; } public long getTimestamp() { return timestamp; } public String getType() { return type; } }