protected Deserializer loadDeserializer()

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;
    }