in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BeanDeserializer.java [209:260]
protected HashMap getMethodMap(Class cl) {
HashMap methodMap = new HashMap();
for (; cl != null; cl = cl.getSuperclass()) {
Method[] methods = cl.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
Method method = methods[i];
if (Modifier.isStatic(method.getModifiers()))
continue;
String name = method.getName();
if (!name.startsWith("set"))
continue;
Class[] paramTypes = method.getParameterTypes();
if (paramTypes.length != 1)
continue;
if (!method.getReturnType().equals(void.class))
continue;
if (findGetter(methods, name, paramTypes[0]) == null)
continue;
// XXX: could parameterize the handler to only deal with public
try {
method.setAccessible(true);
} catch (Throwable e) {
e.printStackTrace();
}
name = name.substring(3);
int j = 0;
for (; j < name.length() && Character.isUpperCase(name.charAt(j)); j++) {
}
if (j == 1)
name = name.substring(0, j).toLowerCase(Locale.ENGLISH) + name.substring(j);
else if (j > 1)
name = name.substring(0, j - 1).toLowerCase(Locale.ENGLISH) + name.substring(j - 1);
methodMap.put(name, method);
}
}
return methodMap;
}