spring源码(六)--XmlValidationModeDetector(获取xml文档校验模式)

这个类决定xml文件的验证模式

核心方法为detectValidationMode,获取一个指定xml文件的输入流,读取其中的验证模式。

这里写图片描述

/**
    校验inputStream,如果xml文件含有doctype,则是dtd约束(返回2),否则是xsd约束(返回3)
*/
 public int detectValidationMode(InputStream inputStream) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

        byte var4;
        try {
            boolean isDtdValidated = false;

            while(true) {
                String content;
                if((content = reader.readLine()) != null) {
                    content = this.consumeCommentTokens(content);
                    //上一行和下3行,作用是忽略注释行
                    if(this.inComment || !StringUtils.hasText(content)) {
                        continue;
                    }

                    if(this.hasDoctype(content)) {
                        isDtdValidated = true;//这一行含有DOCTYPE
                    } else if(!this.hasOpeningTag(content)) {//hasOpeningTag方法会校验,如果这一行有<,并且<后面跟着的是字母,则返回true。
                        continue;
                    }
                }

                int var5 = isDtdValidated?2:3;
                return var5;
            }
        } catch (CharConversionException var9) {
            var4 = 1;
        } finally {
            reader.close();
        }

        return var4;
    }

   public static final int VALIDATION_NONE = 0;
    public static final int VALIDATION_AUTO = 1;
    public static final int VALIDATION_DTD = 2;
    public static final int VALIDATION_XSD = 3;
 private String consumeCommentTokens(String line) {
        if(!line.contains("<!--") && !line.contains("-->")) {//如果这一行不包含注释标记,则直接把这一行返回
            return line;
        } else {
            do {//包含标记的话,进入consume方法,进一步判断
                if((line = this.consume(line)) == null) {
                    return line;
                }
            } while(this.inComment || line.trim().startsWith("<!--"));

            return line;
        }
    }

//如果包含头标记,则返回头标记以后的内容;如果包含结束标记,则返回标记后面的内容。
    private String consume(String line) {
        int index = this.inComment?this.endComment(line):this.startComment(line);
        return index == -1?null:line.substring(index);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值