FieldDeserializer2 create()

in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/FieldDeserializer2Factory.java [127:181]


    FieldDeserializer2 create(Field field) {
        if (Modifier.isTransient(field.getModifiers())
                || Modifier.isStatic(field.getModifiers())) {
            return NullFieldDeserializer.DESER;
        }

        // XXX: could parameterize the handler to only deal with public
        try {
            field.setAccessible(true);
        } catch (Throwable e) {
            e.printStackTrace();
        }

        Class<?> type = field.getType();
        FieldDeserializer2 deser;

        if (String.class.equals(type))
            deser = new StringFieldDeserializer(field);
        else if (byte.class.equals(type)) {
            deser = new ByteFieldDeserializer(field);
        } else if (short.class.equals(type)) {
            deser = new ShortFieldDeserializer(field);
        } else if (int.class.equals(type)) {
            deser = new IntFieldDeserializer(field);
        } else if (long.class.equals(type)) {
            deser = new LongFieldDeserializer(field);
        } else if (float.class.equals(type)) {
            deser = new FloatFieldDeserializer(field);
        } else if (double.class.equals(type)) {
            deser = new DoubleFieldDeserializer(field);
        } else if (boolean.class.equals(type)) {
            deser = new BooleanFieldDeserializer(field);
        } else if (java.sql.Date.class.equals(type)) {
            deser = new SqlDateFieldDeserializer(field);
        } else if (java.sql.Timestamp.class.equals(type)) {
            deser = new SqlTimestampFieldDeserializer(field);
        } else if (java.sql.Time.class.equals(type)) {
            deser = new SqlTimeFieldDeserializer(field);
        }
        // support generic type of map
        else if (Map.class.equals(type)
                && field.getGenericType() != field.getType()) {
            deser = new ObjectMapFieldDeserializer(field);
        } else if (List.class.equals(type)
                && field.getGenericType() != field.getType()) {
            deser = new ObjectListFieldDeserializer(field);
        } else if (Set.class.equals(type)
                && field.getGenericType() != field.getType()) {
            deser = new ObjectSetFieldDeserializer(field);
        } else {
            deser = new ObjectFieldDeserializer(field);
        }

        return deser;
    }