1 /* 2 * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved 3 * 4 * This file is part of Resin(R) Open Source 5 * 6 * Each copy or derived work must preserve the copyright notice and this 7 * notice unmodified. 8 * 9 * Resin Open Source is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * Resin Open Source is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty 17 * of NON-INFRINGEMENT. See the GNU General Public License for more 18 * details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with Resin Open Source; if not, write to the 22 * Free SoftwareFoundation, Inc. 23 * 59 Temple Place, Suite 330 24 * Boston, MA 02111-1307 USA 25 * 26 * @author Scott Ferguson 27 */ 28 29 package com.caucho.jms.message; 30 31 import com.caucho.jms.JMSExceptionWrapper; 32 import com.caucho.vfs.ContextLoaderObjectInputStream; 33 import com.caucho.vfs.ReadStream; 34 import com.caucho.vfs.TempStream; 35 import com.caucho.vfs.WriteStream; 36 37 import javax.jms.JMSException; 38 import javax.jms.ObjectMessage; 39 import java.io.ObjectInputStream; 40 import java.io.ObjectOutputStream; 41 import java.io.Serializable; 42 43 /** 44 * An object message. 45 */ 46 public class ObjectMessageImpl extends MessageImpl implements ObjectMessage { 47 private TempStream _tempStream; 48 49 /** 50 * Writes the object to the stream. 51 */ 52 public void setObject(Serializable o) 53 throws JMSException 54 { 55 checkBodyWriteable(); 56 57 _tempStream = new TempStream(null); 58 59 try { 60 WriteStream ws = new WriteStream(_tempStream); 61 ObjectOutputStream oos = new ObjectOutputStream(ws); 62 oos.writeObject(o); 63 oos.close(); 64 ws.close(); 65 } catch (Exception e) { 66 throw JMSExceptionWrapper.create(e); 67 } 68 } 69 70 /** 71 * Reads the object from the stream. 72 */ 73 public Serializable getObject() 74 throws JMSException 75 { 76 if (_tempStream == null) 77 return null; 78 79 try { 80 ReadStream is = _tempStream.openRead(false); 81 ObjectInputStream ois = new ContextLoaderObjectInputStream(is); 82 Serializable object = (Serializable) ois.readObject(); 83 ois.close(); 84 is.close(); 85 86 return object; 87 } catch (Exception e) { 88 e.printStackTrace(); 89 throw JMSExceptionWrapper.create(e); 90 } 91 } 92 93 /** 94 * Clears the body 95 */ 96 public void clearBody() 97 throws JMSException 98 { 99 super.clearBody(); 100 101 _tempStream = null; 102 } 103 104 public MessageImpl copy() 105 { 106 ObjectMessageImpl msg = new ObjectMessageImpl(); 107 108 copy(msg); 109 110 msg._tempStream = _tempStream; 111 112 return msg; 113 } 114 } 115 116