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 }