001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.codehaus.activesoap.transport.jms;
019    
020    import javax.jms.BytesMessage;
021    import javax.jms.JMSException;
022    import javax.jms.MapMessage;
023    import javax.jms.Message;
024    import javax.jms.ObjectMessage;
025    import javax.jms.Session;
026    import javax.jms.StreamMessage;
027    import javax.jms.TextMessage;
028    import java.util.Enumeration;
029    
030    /**
031     * Some JMS related helper methods
032     *
033     * @version $Revision: 1.1 $
034     */
035    public class JMSUtils {
036    
037        /**
038         * Creates a duplicate message on the given session so that it can be sent elsewhere
039         */
040        public static Message createDuplicateMessage(Session session, Message message) throws JMSException {
041            Message answer = null;
042            if (message instanceof ObjectMessage) {
043                ObjectMessage objMsg = (ObjectMessage) message;
044                answer = session.createObjectMessage(objMsg.getObject());
045            }
046            else if (message instanceof TextMessage) {
047                TextMessage textMsg = (TextMessage) message;
048                answer = session.createTextMessage(textMsg.getText());
049            }
050            else if (message instanceof MapMessage) {
051                MapMessage mapMsg = (MapMessage) message;
052                MapMessage msg = session.createMapMessage();
053                for (Enumeration iter = mapMsg.getMapNames(); iter.hasMoreElements();) {
054                    String name = iter.nextElement().toString();
055                    msg.setObject(name, mapMsg.getObject(name));
056                }
057                answer = msg;
058            }
059            else if (message instanceof BytesMessage) {
060                BytesMessage bytesMsg = (BytesMessage) message;
061                bytesMsg.reset();
062                BytesMessage msg = session.createBytesMessage();
063                try {
064                    for (; ;) {
065                        msg.writeByte(bytesMsg.readByte());
066                    }
067                }
068                catch (JMSException e) {
069                }
070                answer = msg;
071            }
072            else if (message instanceof StreamMessage) {
073                StreamMessage streamMessage = (StreamMessage) message;
074                streamMessage.reset();
075                StreamMessage msg = session.createStreamMessage();
076                Object obj = null;
077                try {
078                    while ((obj = streamMessage.readObject()) != null) {
079                        msg.writeObject(obj);
080                    }
081                }
082                catch (JMSException e) {
083                }
084                answer = msg;
085            }
086            else {
087                answer = session.createMessage();
088            }
089            answer.setJMSMessageID(message.getJMSMessageID());
090            answer.setJMSCorrelationID(message.getJMSCorrelationID());
091            answer.setJMSReplyTo(message.getJMSReplyTo());
092            answer.setJMSDestination(message.getJMSDestination());
093            answer.setJMSDeliveryMode(message.getJMSDeliveryMode());
094            answer.setJMSRedelivered(message.getJMSRedelivered());
095            answer.setJMSType(message.getJMSType());
096            answer.setJMSExpiration(message.getJMSExpiration());
097            answer.setJMSPriority(message.getJMSPriority());
098            answer.setJMSTimestamp(message.getJMSTimestamp());
099            for (Enumeration propertyNames = message.getPropertyNames(); propertyNames.hasMoreElements();) {
100                String name = propertyNames.nextElement().toString();
101                Object obj = message.getObjectProperty(name);
102                answer.setObjectProperty(name, obj);
103            }
104            return answer;
105        }
106    }