protected Object readObjectImpl()

in src/main/java/com/alibaba/com/caucho/hessian/io/HessianSerializerInput.java [109:152]


    protected Object readObjectImpl(Class cl)
            throws IOException {
        try {
            Object obj = cl.newInstance();

            if (_refs == null)
                _refs = new ArrayList();
            _refs.add(obj);

            HashMap fieldMap = getFieldMap(cl);

            int code = read();
            for (; code >= 0 && code != 'z'; code = read()) {
                _peek = code;

                Object key = readObject();

                Field field = (Field) fieldMap.get(key);

                if (field != null) {
                    Object value = readObject(field.getType());
                    field.set(obj, value);
                } else {
                    Object value = readObject();
                }
            }

            if (code != 'z')
                throw expect("map", code);

            // if there's a readResolve method, call it
            try {
                Method method = cl.getMethod("readResolve", new Class[0]);
                return method.invoke(obj, new Object[0]);
            } catch (Exception e) {
            }

            return obj;
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new IOExceptionWrapper(e);
        }
    }