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

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

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

spring源码(六)--XmlValidationModeDetector(获取xml文档校验模式)_第1张图片

/**
    校验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("")) {//如果这一行不包含注释标记,则直接把这一行返回
            return line;
        } else {
            do {//包含标记的话,进入consume方法,进一步判断
                if((line = this.consume(line)) == null) {
                    return line;
                }
            } while(this.inComment || line.trim().startsWith("
                    

你可能感兴趣的:(spring源码解析)