/** * Dianping.com Inc. * Copyright (c) 2003-2013 All Rights Reserved. */ package com.dianping.pigeon.remoting.common.codec.hessian; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.caucho.hessian.io.Hessian2Input; import com.caucho.hessian.io.Hessian2Output; import com.dianping.pigeon.remoting.common.codec.AbstractSerializer; import com.dianping.pigeon.remoting.common.exception.SerializationException; /** * @author xiangwu * @Sep 5, 2013 * */ public class HessianSerializer extends AbstractSerializer { HessianSerializerFactory sessianSerializerFactory = new HessianSerializerFactory(); @Override public Object deserializeResponse(InputStream is) throws SerializationException { return deserializeRequest(is); } @Override public Object deserializeRequest(InputStream is) throws SerializationException { Hessian2Input h2in = new Hessian2Input(is); h2in.setSerializerFactory(sessianSerializerFactory); try { return h2in.readObject(); } catch (Throwable t) { throw new SerializationException(t); } finally { try { h2in.close(); } catch (IOException e) { throw new SerializationException(e); } } } @Override public void serializeResponse(OutputStream os, Object obj) throws SerializationException { serializeRequest(os, obj); } @Override public void serializeRequest(OutputStream os, Object obj) throws SerializationException { Hessian2Output h2out = new Hessian2Output(os); h2out.setSerializerFactory(sessianSerializerFactory); try { h2out.writeObject(obj); h2out.flush(); } catch (Throwable t) { throw new SerializationException(t); } finally { try { h2out.close(); } catch (IOException e) { throw new SerializationException(e); } } } }