编写好XSD文件,然后来看怎么使用XSD文件校验,并解析SqlMapper文件,也就是实现doParseSqlMapperResourceWithSchema()方法。

为了实现这个功能,有两个基本要求:

(1)兼容性:需要兼容mybatis的原生配置,兼容有两种层级,一种是使用DTD校验,这个前面已经说了,走原来的流程,兼容性没有问题;另一种就是走XSD校验,但也需要兼容mybatis原生配置,这种兼容性一方面从上面修改的XSD文件去保证,另一方面也需要从XML的解析去保证。

(2)扩展性:修改的目的就是为了扩展性,所以扩展性也是一个基本要求。但是扩展性不是随意性,也需要按照规范来扩展,这个规范就是自定义的XSD文件。

为了达到这两个基本要求,下面是我的一种思路,主要借鉴于Spring的自定义命名空间:

1、创建一个EntityResolver,读取类路径下指定模式的配置文件,比如:"classpath*:**/dysd-*-namespaces.ini"

2、在ini文件中定义命名空间元信息,如:

aaarticlea/png;base64,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" alt="" />

使用命名空间作为Section的名称,下面的schema、parser分别表示命名空间的xsd文件和解析器实现类,这样就可以根据XML中的XSD命名空间找到校验文件,并且有一个解析入口了。

说明:

  1. apache的commons-configuration提供了ini格式文件的读取API
  2. Spring中使用META-INF/spring.schemas和META-INF/spring.handlers来存储XSD文件和解析器实现类,这里我修改为使用ini文件集中配置
  3. 因为读取的是所有类路径下满足通配符的ini文件,因此可以非常简单的扩展其它命名空间,至于在Java中具体怎么使用XSD来校验,这里就不细说了

我把XML的解析分解为三要素:解析上下文、解析器、被解析文件。doParseSqlMapperResourceWithSchema()方法也很简洁:

protected void doParseSqlMapperResourceWithSchema(Configuration configuration, Resource mapperLocation){
ISqlMapperParserContext context = new SqlMapperParserContext(configuration);
XmlParserUtils.parseXml(context, mapperLocation);
}

解析器接口如下:

public interface IParser<E extends IParserContext> {
public void parse(E parserContext, String location);
public void parse(E parserContext, String[] locationPatterns);
public void parse(E parserContext, InputStream inputStream);
public void parse(E parserContext, Resource resource);
}

解析上下文和解析器实现类又依次分为三个层级:

(1)通用解析上下文:

public interface IParserContext {
public ProblemReporter getProblemReporter();
public EventListener getEventListener();
public SourceExtractor getSourceExtractor();
public Environment getEnvironment();
}

相应层级的解析器实现类主要负责加载被解析文件(比如将字符串通配符加载为Resource对象集合),保证不重复解析,保证可并发执行等。

(2)XML解析上下文

public interface IXmlParserContext extends IParserContext{
public boolean isNamespaceAware();
public DocumentLoader getDocumentLoader();
public EntityResolver getEntityResolver();
public ErrorHandler getErrorHandler();
public XmlParserDelegate getDelegate();
}

相应层级的解析器实现类主要负责将Resource转换为Document对象,并在转换的过程中进行校验。

(3)SqlMapper解析上下文

public interface ISqlMapperParserContext extends IXmlParserContext{
public Configuration getConfiguration();
}

相应层级的解析器实现类主要负责查找根元素所在命名空间的解析器,并使用解析器对Document进行解析。

最终,将解析委托给ini配置文件中的SchemaSqlMapperNamespaceParser类,但是因为这个类需要在文本文件中配置,不方便有参数的构造函数,因而进一步委托给SchemaSqlMapperParserDelegate:

public class SchemaSqlMapperNamespaceParser implements INamespaceParser<ISqlMapperParserContext> {

    @Override
public void init() { } @Override
public void parse(ISqlMapperParserContext parserContext, Document document, Resource resource) {
SchemaSqlMapperParserDelegate delegate = new SchemaSqlMapperParserDelegate(parserContext, document, resource);
delegate.parse();
} @Override
public void destory() { }
}

至此,XSD校验已经完成,也已经找到XML解析入口,后续就是在SchemaSqlMapperParserDelegate中真正的解析了。

使用XSD校验Mybatis的SqlMapper配置文件(2)的更多相关文章

  1. 使用XSD校验Mybatis的SqlMapper配置文件(1)

    这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...

  2. Mybatis中SqlMapper配置的扩展与应用(3)

    隔了两周,首先回顾一下,在Mybatis中的SqlMapper配置文件中引入的几个扩展机制: 1.引入SQL配置函数,简化配置.屏蔽DB底层差异性 2.引入自定义命名空间,允许自定义语句级元素.脚本级 ...

  3. 优化与扩展Mybatis的SqlMapper解析

    接上一篇博文,这一篇来讲述怎么实现SchemaSqlMapperParserDelegate——解析SqlMapper配置文件. 要想实现SqlMapper文件的解析,还需要仔细分析一下mybatis ...

  4. Mybatis中SqlMapper配置的扩展与应用(1)

    奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这 ...

  5. mybatis源码配置文件解析之二:解析settings标签

    在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...

  6. mybatis源码配置文件解析之五:解析mappers标签(解析XML映射文件)

    在上篇文章中分析了mybatis解析<mappers>标签,<mybatis源码配置文件解析之五:解析mappers标签>重点分析了如何解析<mappers>标签中 ...

  7. mybatis 加载配置文件的方法

    一.  使用sqlSessionFactory 的 mapperLocations 进行加载 <!-- SessionFactory --> <bean id="sqlSe ...

  8. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...

  9. IDEA中写MyBatis的xml配置文件编译报错的坑

    IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错 ...

随机推荐

  1. Spring 学习笔记 7. 尚硅谷_佟刚_Spring_Bean 的作用域

    1,理论 •在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域. •默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创 ...

  2. (完全背包 大数)Dollar Dayz (POJ 3181)

    http://poj.org/problem?id=3181 Description Farmer John goes to Dollar Days at The Cow Store and disc ...

  3. Android技术点

    一.四大组件 1.1  Activity 1.2  Broadcast 1.3  Content Provider 1.4  Service 1. Binder 2. Messager 3. AIDL ...

  4. Teamcenter 2007 "由于某些意外的 DBMS 错误失败"

    PLM系统实施过程中经常需要做整个系统的克隆备份.Teamcenter2007在做基于Oracel的系统克隆时,用exp功能导出数据表,部署在目标机器上时会遇到DBMS错误,导致后续DB写操作无法进行 ...

  5. nginx Windows服务形式运行

    背景 现在使用ngnix的人越来越多,nginx的优势劣势网上也很多说明.这里就不探讨nginx优势与劣势,每个工具都有自己优势劣势,没有最好的工具,只有最合适的工具.   如何选择适当的工具,根据项 ...

  6. SAP HANA专题分析目录

    针对HANA的关键技术领域, 做深度解析. 1. HANA开发规范 HANA 各种对象的应用解析.版本管理,开发规范. 2. HANA系统管理 用户.系统权限.数据权限的深度解析. HANA系统配置. ...

  7. maven环境终于可以了

    说说maven可以后小小的体会吧,虽然还没有用maven运行过工程,体会是pom.xml中的dependency属性可以帮助管理项目中的jar包,只要在这里配置下需要的jar包,保存后就会自动从中央仓 ...

  8. maven里的modelVersion

    modelVersion 描述这个POM文件是遵从哪个版本的项目描述符

  9. PHP 表单验证

    1. 验证文本框是否有内容且不能为空 <?php if (! (filter_has_var(INPUT_POST, 'flavor') && (strlen(filter_in ...

  10. ORACLE10g创建表空间,角色与授权

    创建基础表空间,创建用户,授权. -- CREATE TABLESPACE CREATE TABLESPACE TS_JK_LAB_BASIC DATAFILE 'D:\TOOLS\ORACLE\PR ...