public void continueVisit(String ... addKeys) {
        this.key = "";
        String[] newkeys = new String[paths.length + addKeys.length];
        System.arraycopy(paths, 0, newkeys, 0, paths.length);
        System.arraycopy(addKeys, 0, newkeys, paths.length, addKeys.length);
        
        this.paths = newkeys;
        for ( int i=0; i < paths.length;i++) {
            key += paths[i] + "/";
        }
        VisitorInfo info = this.getInfo();
        Object result = info.getResult();
        int idx = infoList.size()-1;
        String path = "";
        
        for (int i = 0; i <= idx; i++) {
            path += "/" + paths[i];
        }
        
        if (result == null) {
            info.setException(new NullPointerException("Null value for key path '" + path + "'"));
            return;
        }

        if (DocUtils.isValueType(result.getClass())) {
            info.setException(new IllegalArgumentException("Path '" + path + "': requires ValueType"));            
            return;
        }
        SchemaType st;
        if (info.getSourceSchemaType() instanceof ListType ) {
            st = ((ListType)info.getSourceSchemaType()).getSupportedSchemaTypes().get(result.getClass());
        } else if (info.getSourceSchemaType() instanceof ArrayType ) {
            st = ((ArrayType)info.getSourceSchemaType()).getSupportedSchemaTypes().get(result.getClass());
        } else {
            String nm = paths[infoList.size()-1];
            Field f = ((EmbeddedType)info.getSourceSchemaType()).getSchema().getField(nm);
            //st = f.getSupportedTypes().get(0);
            st = f.getSchemaType();
        }
        
        if (DocUtils.isListType(result.getClass())) {
            visitList((ListType)st, result);
        } else if (DocUtils.isArrayType(result.getClass())) {
            visitArray((ArrayType)st, result);            
        } else {
            visitEmbedded((EmbeddedType)st,result);
        }
        
    }