xsi:noNamespaceSchemaLocation使用心得

来源:互联网 发布:淘宝收藏加购物车软件 编辑:程序博客网 时间:2024/06/05 07:18
在使用ehcache的时候碰到一个问题: 
Java代码  收藏代码
  1. is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ehc  
  2. ache'  

Java代码  收藏代码
  1. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ehcache'  


分析下来就是 ehcache.xml文件加载出问题了,根据错误可以看出是"ehcache"节点无法解析,那么首先就可以想到是描述文件出错ehcache.xsd; 
为什么加载不到呢在本地直接
Java代码  收藏代码
  1. curl -X GET http://ehcache.org/ehcache.xsd   

发现确实是链接不到服务器,发现是内网机器无法访问网络; 
定位到问题首先想到的就是,那把ehcache.xsd下载到本地直接读,思路是正确的,只是文件路径的设置需要注意一下 

比如: 
如果,ehcache.xsd 和 ehcache.xml文件同目录下面 
Java代码  收藏代码
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:noNamespaceSchemaLocation="ehcache.xsd"  
  3.     updateCheck="false" dynamicConfig="false">  

这样配置是错误的,加载不了的; 
那么要如何配置
Java代码  收藏代码
  1. xsi:noNamespaceSchemaLocation=""  
? 
看了一下源代码
Java代码  收藏代码
  1. org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource inputSource, Resource resource)  

Resource:我首先想到的就是:classpath:META-INF/spring/ehcache.xsd 
没有仔细看,直接改上去: 
Java代码  收藏代码
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:noNamespaceSchemaLocation="classpath:META-INF/spring/ehcache.xsd"  
  3.     updateCheck="false" dynamicConfig="false">  
原创粉丝点击