in src/main/java/com/alibaba/com/caucho/hessian/io/BeanSerializer.java [206:278]
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
if (out.addRef(obj))
return;
Class cl = obj.getClass();
try {
if (_writeReplace != null) {
Object repl;
if (_writeReplaceFactory != null)
repl = _writeReplace.invoke(_writeReplaceFactory, obj);
else
repl = _writeReplace.invoke(obj);
out.removeRef(obj);
out.writeObject(repl);
out.replaceRef(repl, obj);
return;
}
} catch (Exception e) {
log.log(Level.FINER, e.toString(), e);
}
int ref = out.writeObjectBegin(cl.getName());
if (ref < -1) {
// Hessian 1.1 uses a map
for (int i = 0; i < _methods.length; i++) {
Method method = _methods[i];
Object value = null;
try {
value = _methods[i].invoke(obj, (Object[]) null);
} catch (Exception e) {
log.log(Level.FINE, e.toString(), e);
}
out.writeString(_names[i]);
out.writeObject(value);
}
out.writeMapEnd();
} else {
if (ref == -1) {
out.writeInt(_names.length);
for (int i = 0; i < _names.length; i++)
out.writeString(_names[i]);
out.writeObjectBegin(cl.getName());
}
for (int i = 0; i < _methods.length; i++) {
Method method = _methods[i];
Object value = null;
try {
value = _methods[i].invoke(obj, (Object[]) null);
} catch (Exception e) {
log.log(Level.FINER, e.toString(), e);
}
out.writeObject(value);
}
}
}