1 /*** 2 * 3 * Copyright 2004 Protique Ltd 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 **/ 18 package org.codehaus.activemq; 19 20 import org.codehaus.activemq.message.*; 21 22 import javax.jms.*; 23 import java.util.Enumeration; 24 25 26 /*** 27 * Transforms foreign Destinations and Messages to ActiveMQ formats 28 * 29 * @version $Revision: 1.10 $ 30 */ 31 class ActiveMQMessageTransformation { 32 /*** 33 * @param destination 34 * @return an ActiveMQDestination 35 * @throws JMSException if an error occurs 36 */ 37 static ActiveMQDestination transformDestination(Destination destination) throws JMSException { 38 ActiveMQDestination result = null; 39 if (destination != null) { 40 if (destination instanceof ActiveMQDestination) { 41 result = (ActiveMQDestination) destination; 42 } 43 else { 44 if (destination instanceof TemporaryQueue) { 45 result = new ActiveMQTemporaryQueue(((Queue) destination).getQueueName()); 46 } 47 else if (destination instanceof TemporaryTopic) { 48 result = new ActiveMQTemporaryTopic(((Topic) destination).getTopicName()); 49 } 50 else if (destination instanceof Queue) { 51 result = new ActiveMQQueue(((Queue) destination).getQueueName()); 52 } 53 else if (destination instanceof Topic) { 54 result = new ActiveMQTopic(((Topic) destination).getTopicName()); 55 } 56 } 57 } 58 return result; 59 } 60 61 /*** 62 * @param message 63 * @return an ActiveMQMessage 64 * @throws JMSException if an error occurs 65 */ 66 public static final ActiveMQMessage transformMessage(Message message) throws JMSException { 67 if (message instanceof ActiveMQMessage) { 68 return (ActiveMQMessage) message; 69 } 70 else { 71 ActiveMQMessage activeMessage = null; 72 if (message instanceof ObjectMessage) { 73 javax.jms.ObjectMessage objMsg = (javax.jms.ObjectMessage) message; 74 ActiveMQObjectMessage msg = new ActiveMQObjectMessage(); 75 msg.setObject(objMsg.getObject()); 76 activeMessage = msg; 77 } 78 else if (message instanceof TextMessage) { 79 javax.jms.TextMessage textMsg = (javax.jms.TextMessage) message; 80 ActiveMQTextMessage msg = new ActiveMQTextMessage(); 81 msg.setText(textMsg.getText()); 82 activeMessage = msg; 83 } 84 else if (message instanceof MapMessage) { 85 javax.jms.MapMessage mapMsg = (javax.jms.MapMessage) message; 86 ActiveMQMapMessage msg = new ActiveMQMapMessage(); 87 for (Enumeration iter = mapMsg.getMapNames(); iter.hasMoreElements();) { 88 String name = iter.nextElement().toString(); 89 msg.setObject(name, mapMsg.getObject(name)); 90 } 91 activeMessage = msg; 92 } 93 else if (message instanceof BytesMessage) { 94 javax.jms.BytesMessage bytesMsg = (javax.jms.BytesMessage) message; 95 bytesMsg.reset(); 96 ActiveMQBytesMessage msg = new ActiveMQBytesMessage(); 97 try { 98 for (; ;) { 99 msg.writeByte(bytesMsg.readByte()); 100 } 101 } 102 catch (JMSException e) { 103 } 104 activeMessage = msg; 105 } 106 else if (message instanceof StreamMessage) { 107 javax.jms.StreamMessage streamMessage = (javax.jms.StreamMessage) message; 108 streamMessage.reset(); 109 ActiveMQStreamMessage msg = new ActiveMQStreamMessage(); 110 Object obj = null; 111 try { 112 while ((obj = streamMessage.readObject()) != null) { 113 msg.writeObject(obj); 114 } 115 } 116 catch (JMSException e) { 117 } 118 activeMessage = msg; 119 } 120 else { 121 activeMessage = new ActiveMQMessage(); 122 } 123 activeMessage.setJMSMessageID(message.getJMSMessageID()); 124 activeMessage.setJMSCorrelationID(message.getJMSCorrelationID()); 125 activeMessage.setJMSReplyTo(transformDestination(message.getJMSReplyTo())); 126 activeMessage.setJMSDestination(transformDestination(message.getJMSDestination())); 127 activeMessage.setJMSDeliveryMode(message.getJMSDeliveryMode()); 128 activeMessage.setJMSRedelivered(message.getJMSRedelivered()); 129 activeMessage.setJMSType(message.getJMSType()); 130 activeMessage.setJMSExpiration(message.getJMSExpiration()); 131 activeMessage.setJMSPriority(message.getJMSPriority()); 132 activeMessage.setJMSTimestamp(message.getJMSTimestamp()); 133 for (Enumeration propertyNames = message.getPropertyNames(); propertyNames.hasMoreElements();) { 134 String name = propertyNames.nextElement().toString(); 135 Object obj = message.getObjectProperty(name); 136 activeMessage.setObjectProperty(name, obj); 137 } 138 return activeMessage; 139 } 140 } 141 }