package example; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import com.caucho.hessian.io.*; public class HessianSerializeServlet extends HttpServlet { /** * The servlet serializes three Car objects into a byte[] array * using Hessian 2.0, Hessian 2.0 with a Deflation envelope, and * java.io.ObjectOutputStream serialization. */ public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); byte []data = hessianSerialize(); out.println("<pre>"); out.println("Hessian serialize size: " + data.length); out.println("Deserialize: " + hessianDeserialize(data)); out.println(""); data = hessianDeflate(); out.println("Deflate serialize size: " + data.length); out.println("Inflate: " + hessianInflate(data)); out.println(""); data = javaSerialize(); out.println("java.io serialize size: " + data.length); } /** * Hessian 2.0 serialization API resembles the java.io.ObjectOutputStream. */ private byte []hessianSerialize() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Hessian2Output out = new Hessian2Output(bos); hessianSerialize(out); out.close(); return bos.toByteArray(); } /** * Hessian 2.0 deserialization API resembles the java.io.ObjectOutputStream. */ private Object hessianDeserialize(byte []data) throws IOException { ByteArrayInputStream bis = new ByteArrayInputStream(data); Hessian2Input in = new Hessian2Input(bis); return hessianDeserialize(in); } /** * Serialization with compression is wraps the Hessian2Output stream * in a compression envelope. The serialization itself is identical * with and without the envelope. */ private byte []hessianDeflate() throws IOException { Deflation envelope = new Deflation(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); Hessian2Output out = new Hessian2Output(bos); out = envelope.wrap(out); hessianSerialize(out); out.close(); return bos.toByteArray(); } private Object hessianInflate(byte []data) throws IOException { Deflation envelope = new Deflation(); ByteArrayInputStream bis = new ByteArrayInputStream(data); Hessian2Input in = new Hessian2Input(bis); in = envelope.unwrap(in); return hessianDeserialize(in); } /** * The example serializes three Car objects into the message. The * application can use any sequence of <code>writeXXX</code> calls * as long as the deserialization follows the same order. */ private void hessianSerialize(Hessian2Output out) throws IOException { out.startMessage(); out.writeInt(3); Car car1 = new Car(Model.EDSEL, Color.GREEN, 1954); out.writeObject(car1); Car car2 = new Car(Model.MODEL_T, Color.BLACK, 1937); out.writeObject(car2); Car car3 = new Car(Model.CIVIC, Color.BLUE, 1998); out.writeObject(car3); out.completeMessage(); } private Object hessianDeserialize(Hessian2Input in) throws IOException { in.startMessage(); ArrayList list = new ArrayList(); int length = in.readInt(); for (int i = 0; i < length; i++) { list.add(in.readObject()); } in.completeMessage(); return list; } private byte []javaSerialize() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeInt(3); Car car1 = new Car(Model.EDSEL, Color.GREEN, 1954); out.writeObject(car1); Car car2 = new Car(Model.MODEL_T, Color.BLACK, 1937); out.writeObject(car2); Car car3 = new Car(Model.CIVIC, Color.BLUE, 1998); out.writeObject(car3); out.close(); return bos.toByteArray(); } }