1 24 package org.objectweb.joram.mom.util; 25 26 import org.objectweb.joram.shared.messages.Message; 27 import org.objectweb.joram.shared.messages.MessageType; 28 29 import java.io.Serializable ; 30 import java.util.Enumeration ; 31 import java.util.Hashtable ; 32 import java.util.HashMap ; 33 import java.util.Map ; 34 import java.util.Iterator ; 35 36 import javax.jms.BytesMessage ; 37 import javax.jms.IllegalStateException ; 38 import javax.jms.MapMessage ; 39 import javax.jms.MessageFormatException ; 40 import javax.jms.ObjectMessage ; 41 import javax.jms.StreamMessage ; 42 import javax.jms.TextMessage ; 43 import javax.jms.JMSException ; 44 45 46 51 public class MessageConverterModule 52 { 53 60 public static Message convert(javax.jms.Message jmsMessage) 61 throws MessageFormatException 62 { 63 if (jmsMessage == null) return null; 64 65 Message msg = Message.create(); 66 67 try { 68 if (jmsMessage instanceof BytesMessage ) { 69 long length = ((BytesMessage ) jmsMessage).getBodyLength(); 71 byte[] bytes = new byte[(new Long (length)).intValue()]; 72 ((BytesMessage ) jmsMessage).readBytes(bytes); 73 msg.setBytes(bytes); 74 } else if (jmsMessage instanceof MapMessage ) { 75 String name; 77 HashMap map = new HashMap (); 78 for (Enumeration names = ((MapMessage ) jmsMessage).getMapNames(); 79 names.hasMoreElements();) { 80 name = (String ) names.nextElement(); 81 map.put(name, ((MapMessage ) jmsMessage).getObject(name)); 82 } 83 msg.setMap(map); 84 } else if (jmsMessage instanceof ObjectMessage ) { 85 msg.setObject(((ObjectMessage ) jmsMessage).getObject()); 87 } else if (jmsMessage instanceof TextMessage ) { 88 msg.setText(((TextMessage ) jmsMessage).getText()); 90 } else if (jmsMessage instanceof StreamMessage ) { 91 int length = 0; 93 try { 94 while (true) { 95 ((StreamMessage ) jmsMessage).readByte(); 96 length++; 97 } 98 } catch (Exception exc) {} 99 byte[] bytes = new byte[length]; 100 ((StreamMessage ) jmsMessage).readBytes(bytes); 101 msg.setStream(bytes); 102 } 103 104 msg.setCorrelationId(jmsMessage.getJMSCorrelationID()); 106 msg.setPersistent(jmsMessage.getJMSDeliveryMode() == 108 javax.jms.DeliveryMode.PERSISTENT); 109 110 119 120 121 msg.setExpiration(jmsMessage.getJMSExpiration()); 123 msg.setIdentifier(jmsMessage.getJMSMessageID()); 125 msg.setPriority(jmsMessage.getJMSPriority()); 127 128 138 139 140 msg.setTimestamp(jmsMessage.getJMSTimestamp()); 142 if (jmsMessage.getJMSType() != null) 144 msg.setOptionalHeader("JMSType", jmsMessage.getJMSType()); 145 146 String name; 148 for (Enumeration names = jmsMessage.getPropertyNames(); 149 names.hasMoreElements();) { 150 name = (String ) names.nextElement(); 151 msg.setObjectProperty(name, jmsMessage.getObjectProperty(name)); 152 } 153 } 154 catch (JMSException exc) { 155 throw new MessageFormatException ("Error while reading the foreign " 156 + "JMS message: " + exc); 157 } 158 catch (Exception exc) { 159 throw new MessageFormatException ("Error while writing the MOM message: " 160 + exc); 161 } 162 return msg; 163 } 164 165 174 public static javax.jms.Message 175 convert(javax.jms.Session jmsSession, Message momMessage) 176 throws JMSException  177 { 178 javax.jms.Message jmsMessage = null; 179 180 try { 181 if (momMessage.getType() == MessageType.BYTES) 183 jmsMessage = jmsSession.createBytesMessage(); 184 else if (momMessage.getType() == MessageType.MAP) 186 jmsMessage = jmsSession.createMapMessage(); 187 else if (momMessage.getType() == MessageType.OBJECT) 189 jmsMessage = jmsSession.createObjectMessage(); 190 else if (momMessage.getType() == MessageType.TEXT) 192 jmsMessage = jmsSession.createTextMessage(); 193 else if (momMessage.getType() == MessageType.STREAM) 195 jmsMessage = jmsSession.createStreamMessage(); 196 } 197 catch (Exception exc) { 199 throw new IllegalStateException ("" + exc); 200 } 201 202 try { 203 if (momMessage.getType() == MessageType.BYTES) 205 ((BytesMessage ) jmsMessage).writeBytes(momMessage.getBytes()); 206 else if (momMessage.getType() == MessageType.MAP) { 208 Map map = momMessage.getMap(); 209 String name; 210 if (map.keySet() != null) { 211 for (Iterator it = map.keySet().iterator(); it.hasNext(); ) { 212 name = (String ) it.next(); 213 ((MapMessage ) jmsMessage).setObject(name, map.get(name)); 214 } 215 } 216 } 217 else if (momMessage.getType() == MessageType.OBJECT) { 219 Serializable obj = (Serializable ) momMessage.getObject(); 220 ((ObjectMessage ) jmsMessage).setObject(obj); 221 } 222 else if (momMessage.getType() == MessageType.TEXT) 224 ((TextMessage ) jmsMessage).setText(momMessage.getText()); 225 else if (momMessage.getType() == MessageType.STREAM) 227 ((StreamMessage ) jmsMessage).writeBytes(momMessage.getStream()); 228 229 jmsMessage.setJMSCorrelationID(momMessage.getCorrelationId()); 231 if (momMessage.getPersistent()) 233 jmsMessage.setJMSDeliveryMode(javax.jms.DeliveryMode.PERSISTENT); 234 else 235 jmsMessage.setJMSDeliveryMode(javax.jms.DeliveryMode.NON_PERSISTENT); 236 jmsMessage.setJMSExpiration(momMessage.getExpiration()); 238 jmsMessage.setJMSPriority(momMessage.getPriority()); 240 241 242 253 254 255 jmsMessage.setJMSTimestamp(momMessage.getTimestamp()); 257 if (momMessage.getOptionalHeader("JMSType") != null) 259 jmsMessage.setJMSType((String ) momMessage.getOptionalHeader("JMSType")); 260 261 String name; 263 for (Enumeration names = momMessage.getPropertyNames(); 264 names.hasMoreElements();) { 265 name = (String ) names.nextElement(); 266 jmsMessage.setObjectProperty(name, momMessage.getObjectProperty(name)); 267 } 268 } 269 catch (JMSException exc) { 270 throw new MessageFormatException ("Error while writing the foreign " 271 + "JMS message: " + exc); 272 } 273 catch (Exception exc) { 274 throw new MessageFormatException ("Error while reading the MOM message: " 275 + exc); 276 } 277 return jmsMessage; 278 } 279 } 280 | Popular Tags |