package vnet.sms.gateway.server.framework.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.serialization.ObjectDecoderInputStream; import org.jboss.netty.handler.codec.serialization.ObjectEncoderOutputStream; import vnet.sms.common.messages.GsmPdu; import vnet.sms.gateway.transports.serialization.ReferenceableMessageContainer; public final class SerializationUtils { public static ChannelBuffer serialize(final int messageRef, final GsmPdu gsmPdu) throws IOException { final ByteArrayOutputStream serializedContainer = new ByteArrayOutputStream(); final ObjectEncoderOutputStream objectEncoderOut = new ObjectEncoderOutputStream( serializedContainer); objectEncoderOut.writeObject(ReferenceableMessageContainer.wrap( messageRef, gsmPdu)); objectEncoderOut.flush(); objectEncoderOut.close(); return ChannelBuffers.copiedBuffer(serializedContainer.toByteArray()); } public static GsmPdu deserialize(final MessageEvent messageEvent) throws ClassNotFoundException, IOException { if (!(messageEvent.getMessage() instanceof ChannelBuffer)) { throw new IllegalArgumentException( "Expected payload of type ChannelBuffer. Got: " + messageEvent.getMessage()); } final ChannelBuffer encodedMessage = ChannelBuffer.class .cast(messageEvent.getMessage()); final ByteArrayInputStream encodedMessageBytes = new ByteArrayInputStream( encodedMessage.array()); final ObjectDecoderInputStream objectDecoderIn = new ObjectDecoderInputStream( encodedMessageBytes); final Object readObject = objectDecoderIn.readObject(); if (!(readObject instanceof ReferenceableMessageContainer)) { throw new IllegalArgumentException("Expected message of type " + ReferenceableMessageContainer.class.getName() + " after deserialization. Got: " + readObject); } return GsmPdu.class.cast(ReferenceableMessageContainer.class.cast( readObject).getMessage()); } private SerializationUtils() { } }