01: /*
02: * JBoss, Home of Professional Open Source.
03: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
04: * as indicated by the @author tags. See the copyright.txt file in the
05: * distribution for a full listing of individual contributors.
06: *
07: * This is free software; you can redistribute it and/or modify it
08: * under the terms of the GNU Lesser General Public License as
09: * published by the Free Software Foundation; either version 2.1 of
10: * the License, or (at your option) any later version.
11: *
12: * This software is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this software; if not, write to the Free
19: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21: */
22: package org.jboss.util;
23:
24: import java.io.ByteArrayInputStream;
25: import java.io.ByteArrayOutputStream;
26: import java.io.ObjectInputStream;
27: import java.io.ObjectOutputStream;
28: import java.io.IOException;
29:
30: import org.jboss.util.stream.CustomObjectInputStreamWithClassloader;
31: import org.jboss.util.stream.CustomObjectOutputStream;
32:
33: /**
34: * @author <a href="mailto:reverbel@ime.usp.br">Francisco Reverbel</a>
35: * @version $Revision: 57194 $
36: */
37: public class Conversion {
38: /**
39: * Receives an object and converts it into a byte array. Used to embed
40: * a JBoss oid into the "reference data" (object id) field of a CORBA
41: * reference.
42: */
43: public static byte[] toByteArray(Object obj) {
44: try {
45: ByteArrayOutputStream os = new ByteArrayOutputStream();
46: ObjectOutputStream oos = new CustomObjectOutputStream(os);
47:
48: oos.writeObject(obj);
49: oos.flush();
50: byte[] a = os.toByteArray();
51: os.close();
52: return a;
53: } catch (IOException ioe) {
54: throw new RuntimeException(
55: "Object id serialization error:\n" + ioe);
56: }
57: }
58:
59: /**
60: * Receives a classloader and a byte array previously returned by a call to
61: * <code>toByteArray</code> and retrieves an object from it. Used to
62: * extract a JBoss oid from the "reference data" (object id) field of a
63: * CORBA reference.
64: */
65: public static Object toObject(byte[] a, ClassLoader cl)
66: throws IOException, ClassNotFoundException {
67: ByteArrayInputStream is = new ByteArrayInputStream(a);
68: ObjectInputStream ois = new CustomObjectInputStreamWithClassloader(
69: is, cl);
70: Object obj = ois.readObject();
71: is.close();
72: return obj;
73: }
74:
75: /**
76: * Receives a byte array previously returned by a call to
77: * <code>toByteArray</code> and retrieves an object from it. Used to
78: * extract a JBoss oid from the "reference data" (object id) field of a
79: * CORBA reference.
80: */
81: public static Object toObject(byte[] a) throws IOException,
82: ClassNotFoundException {
83: return toObject(a, Thread.currentThread()
84: .getContextClassLoader());
85: }
86:
87: }
|