public void writeObject()

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