001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer(s): Guillaume Sauthier
022: * Contributor(s):
023: *
024: * --------------------------------------------------------------------------
025: * $Id: JNDIUtils.java 5459 2004-09-17 22:33:33Z ehardesty $
026: * --------------------------------------------------------------------------
027: */package org.objectweb.jonas.common;
028:
029: import java.io.ByteArrayInputStream;
030: import java.io.ByteArrayOutputStream;
031: import java.io.IOException;
032: import java.io.ObjectInputStream;
033: import java.io.ObjectOutputStream;
034: import java.io.OptionalDataException;
035: import org.objectweb.util.monolog.api.BasicLevel;
036: import org.objectweb.util.monolog.api.Logger;
037:
038: /**
039: * JNDIUtils groups all commonly used methods for JNDI.
040: * @author Guillaume Sauthier
041: */
042: public class JNDIUtils {
043:
044: /**
045: * Private empty Constructor for Utility classes
046: */
047: private JNDIUtils() {
048: }
049:
050: /**
051: * Return an array of byte from a given object
052: * @param obj the object from which we must extract the bytes.
053: * @return the byte[] from an object
054: */
055: public static byte[] getBytesFromObject(Object obj) {
056: return getBytesFromObject(obj, null);
057: }
058:
059: /**
060: * Return an array of byte from a given object
061: * @param obj the object from which we must extract the bytes.
062: * @param logger logger to log exceptions
063: * @return the byte[] from an object
064: */
065: public static byte[] getBytesFromObject(Object obj, Logger logger) {
066:
067: if (obj == null) {
068: return null;
069: }
070:
071: ByteArrayOutputStream baos = new ByteArrayOutputStream();
072:
073: ObjectOutputStream oos = null;
074: byte[] bytes = null;
075:
076: try {
077: oos = new ObjectOutputStream(baos);
078: oos.writeObject(obj);
079: bytes = baos.toByteArray();
080: } catch (Exception e) {
081: //Can't tranform
082: return null;
083: } finally {
084: try {
085: oos.close();
086: baos.close();
087: } catch (Exception e) {
088: if (logger != null) {
089: logger.log(BasicLevel.DEBUG,
090: "Cannot close output streams : '"
091: + e.getMessage() + "'");
092: }
093: }
094: }
095: return bytes;
096: }
097:
098: /**
099: * Return an object from an array of bytes. Useful for BinaryRefAddr
100: * Useful for BinaryRefAddr
101: * @param bytes an array of bytes
102: * @return an object or null if there is an error of if it's empty
103: */
104: public static Object getObjectFromBytes(byte[] bytes) {
105: return getObjectFromBytes(bytes, null);
106: }
107:
108: /**
109: * Return an object from an array of bytes. Useful for BinaryRefAddr
110: * Useful for BinaryRefAddr
111: * @param bytes an array of bytes
112: * @param logger logger to log exceptions
113: * @return an object or null if there is an error of if it's empty
114: */
115: public static Object getObjectFromBytes(byte[] bytes, Logger logger) {
116: //Declaration
117: ByteArrayInputStream bis = null;
118: ObjectInputStream ois = null;
119: Object obj = null;
120:
121: if (bytes == null) {
122: return null;
123: }
124:
125: bis = new ByteArrayInputStream(bytes);
126: try {
127: ois = new ObjectInputStream(bis);
128: obj = ois.readObject();
129:
130: } catch (ClassNotFoundException cfe) {
131: if (logger != null) {
132: logger.log(BasicLevel.DEBUG,
133: "Cannot get object from bytes : "
134: + cfe.getMessage());
135: }
136: } catch (OptionalDataException ode) {
137: if (logger != null) {
138: logger.log(BasicLevel.DEBUG,
139: "Cannot get object from bytes : "
140: + ode.getMessage());
141: }
142: } catch (IOException ioe) {
143: if (logger != null) {
144: logger.log(BasicLevel.DEBUG,
145: "Cannot get object from bytes : "
146: + ioe.getMessage());
147: }
148: } finally {
149: try {
150: bis.close();
151: ois.close();
152: } catch (Exception e) {
153: if (logger != null) {
154: logger.log(BasicLevel.DEBUG,
155: "Cannot close input stream : "
156: + e.getMessage());
157: }
158: }
159: }
160: return obj;
161: }
162:
163: }
|