EntityResolver解析

spring解析XML,SAX首先读取该XML文件上的声明,根据声明去寻找相应的DTD定义,以便对文档做验证。默认的寻找规则是通过网络(声明的DTD的URL地址)来下载相应的DTD声明,并进行验证。由于出于网络的原因,spring提供了一个自定义寻找DTD/XSD声明的方式。

spring解析XML的代码:

protected Document doLoadDocument(InputSource inputSource, Resource resource) throws Exception {
   return this.documentLoader.loadDocument(inputSource, getEntityResolver(), this.errorHandler,
         getValidationModeForResource(resource), isNamespaceAware());
}
public interface EntityResolver {
    InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException;
}

spring使用DelegatingEntityResolver实现类来解析XML的自定义声明

public InputSource resolveEntity(@Nullable String publicId, @Nullable String systemId)
      throws SAXException, IOException {

   if (systemId != null) {
      if (systemId.endsWith(DTD_SUFFIX)) {
         return this.dtdResolver.resolveEntity(publicId, systemId);
      }
      else if (systemId.endsWith(XSD_SUFFIX)) {
         return this.schemaResolver.resolveEntity(publicId, systemId);
      }
   }

   // Fall back to the parser's default behavior.
   return null;
}

一、读取XSD

参数值:

publicId=null

systemId=http://www.springframework.org/schema/beans/spring-beans.xsd

加载机制是在META-INF/Spring.schemas文件中systemId对应的xsd

二、读取DTD

 

 参数:

publicId=- // Spring //DTD  BEAN  2.0 // EN

systemId=http: // www.springframework.org/dtd/Spring-beans-2.0.dtd

加载机制是截取systemId的Spring-beans-2.0.dtd取当前路径下寻找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值