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 }