in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java [484:548]
protected Deserializer loadDeserializer(Class cl)
throws HessianProtocolException {
Deserializer deserializer = null;
for (int i = 0;
deserializer == null && _factories != null && i < _factories.size();
i++) {
AbstractSerializerFactory factory;
factory = (AbstractSerializerFactory) _factories.get(i);
deserializer = factory.getDeserializer(cl);
}
if (deserializer != null)
return deserializer;
// XXX: need test
deserializer = _contextFactory.getDeserializer(cl.getName());
if (deserializer != null)
return deserializer;
ContextSerializerFactory factory = null;
if (cl.getClassLoader() != null)
factory = ContextSerializerFactory.create(cl.getClassLoader());
else
factory = ContextSerializerFactory.create(_systemClassLoader);
deserializer = factory.getDeserializer(cl.getName());
if (deserializer != null)
return deserializer;
deserializer = factory.getCustomDeserializer(cl);
if (deserializer != null)
return deserializer;
if (Collection.class.isAssignableFrom(cl))
deserializer = new CollectionDeserializer(cl);
else if (Map.class.isAssignableFrom(cl)) {
deserializer = new MapDeserializer(cl);
} else if (Iterator.class.isAssignableFrom(cl)) {
deserializer = IteratorDeserializer.create();
} else if (Annotation.class.isAssignableFrom(cl)) {
deserializer = new AnnotationDeserializer(cl);
} else if (cl.isInterface()) {
deserializer = new ObjectDeserializer(cl);
} else if (cl.isArray()) {
deserializer = new ArrayDeserializer(cl.getComponentType());
} else if (Enumeration.class.isAssignableFrom(cl)) {
deserializer = EnumerationDeserializer.create();
} else if (Enum.class.isAssignableFrom(cl))
deserializer = new EnumDeserializer(cl);
else if (Class.class.equals(cl))
deserializer = new ClassDeserializer(getClassLoader());
else
deserializer = getDefaultDeserializer(cl);
return deserializer;
}