package org.rzo.netty.ahessian.rpc.message; import java.util.Map; import com.caucho.hessian4.io.Deserializer; import com.caucho.hessian4.io.HessianProtocolException; import com.caucho.hessian4.io.Serializer; import com.caucho.hessian4.io.SerializerFactory; public class MappingSerializerFactory extends SerializerFactory { Map<String, String> _serializers; Map<String, String> _deserializers; public MappingSerializerFactory(Map<String, String> serializers, Map<String, String> deserializers) { _serializers = serializers; _deserializers = deserializers; } @Override protected Deserializer loadDeserializer(Class cl) throws HessianProtocolException { String type = getType(cl, _deserializers); return (Deserializer) instantiate(type); } protected Serializer loadSerializer(Class cl) throws HessianProtocolException { String type = getType(cl, _serializers); return (Serializer) instantiate(type); } private String getType(Class cl, Map<String, String> mapping) { if (mapping == null || cl == null) return null; return mapping.get(cl.getName()); } private Object instantiate(String type) { if (type == null) return null; try { Class clazz = Class.forName(type); Object result = clazz.newInstance(); return result; } catch (Exception ex) { ex.printStackTrace(); return null; } } }