package serializers; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Array; import org.jboss.serial.io.JBossObjectInputStream; import org.jboss.serial.io.JBossObjectOutputStream; import org.jboss.serial.util.StringUtilBuffer; import data.media.MediaContent; public class JBossSerialization { public static void register(final TestGroups groups) { groups.media.add( JavaBuiltIn.mediaTransformer, new JBossSerializationSerializer<MediaContent>(MediaContent.class) , new SerFeatures( SerFormat.BINARY, SerGraph.FULL_GRAPH, SerClass.ZERO_KNOWLEDGE, "" ) ); } private static final class JBossSerializationSerializer<T> extends Serializer<T> { private final Class<T> clz; public JBossSerializationSerializer(final Class<T> c) { clz = c; } @Override public String getName() { return "jboss-serialization"; } @Override @SuppressWarnings("unchecked") public T deserialize(final byte[] array) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(array); JBossObjectInputStream jois = new JBossObjectInputStream( bais, new StringUtilBuffer(BUFFER_SIZE, BUFFER_SIZE) ); return (T) jois.readObject(); } @Override public byte[] serialize(final T data) throws IOException { ByteArrayOutputStream baos = outputStream(data); JBossObjectOutputStream joos = new JBossObjectOutputStream( baos, new StringUtilBuffer(BUFFER_SIZE, BUFFER_SIZE) ); joos.writeObject(data); return baos.toByteArray(); } @Override public final void serializeItems(final T[] items, final OutputStream os) throws Exception { JBossObjectOutputStream jous = new JBossObjectOutputStream(os); for (Object item : items) { jous.writeObject(item); } jous.flush(); jous.close(); } @SuppressWarnings("unchecked") @Override public T[] deserializeItems(final InputStream in, final int numOfItems) throws Exception { JBossObjectInputStream jois = new JBossObjectInputStream(in); T[] result = (T[]) Array.newInstance(clz, numOfItems); for (int i = 0; i < numOfItems; ++i) { result[i] = (T) jois.readObject(); } jois.close(); return result; } } }