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