package org.jbpm.services.task.impl.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializableUtil {
private SerializableUtil() {
// static methods
}
public static byte[] serialize( Serializable object ) throws IOException {
return serialize(object, Thread.currentThread().getContextClassLoader());
}
public static byte[] serialize( Serializable object, ClassLoader classLoader ) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutput out = null;
byte[] result;
try {
out = new ObjectOutputStream(outputStream);
out.writeObject(object);
result = outputStream.toByteArray();
} finally {
try {
if( out != null ) {
out.close();
}
} catch( IOException ex ) {
// ignore close exception
}
try {
outputStream.close();
} catch( IOException ex ) {
// ignore close exception
}
}
return result;
}
public static Serializable deserialize( byte[] byteArray ) throws IOException, ClassNotFoundException {
return deserialize(byteArray, Thread.currentThread().getContextClassLoader());
}
public static Serializable deserialize( byte[] byteArray, ClassLoader classLoader ) throws IOException, ClassNotFoundException {
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
ByteArrayInputStream byteArrayIn = new ByteArrayInputStream(byteArray);
ObjectInput objectIn = null;
Serializable result;
try {
objectIn = new ObjectInputStream(byteArrayIn);
result = (Serializable) objectIn.readObject();
} finally {
try {
byteArrayIn.close();
} catch( IOException ex ) {
// ignore close exception
}
try {
if( objectIn != null ) {
objectIn.close();
}
} catch( IOException ex ) {
// ignore close exception
}
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
return result;
}
}