有时候你会发现过去一直启动正常的系统,某天启动时会报出形如下面的错误:
org.xml.sax.SAXParseException: schema_reference.4:Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans-2.0.xsd', because1) could not find the document2) the document could not be read3) the root element of the document is not <xsd:schema>.
很显然,spring xml配置文件中指定的xsd文件读取不到了,原因多是因为断网或spring的官网暂时无法连接导致的。 你可以通过在浏览器输入xsd文件的URL,如:http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 进行确认。
关于这个问题,网上有两种常见的解决方法,第一种简单有效,但是工作量大,即:把所有spring配置文件中url形式的xsd路径转换成指向本地xsd文件的classpath形式的路径,例如:classpath:org/springframework/beans/factory/xml/spring-beans-2.5.xsd ,再有一种方法就是在本机搭建web服务器,按URL创建相应文件夹,放入对应xsd文件,在本机hosts文件中加入"127.0.0.1 www.springframework.org".实际上,这两种方法都属于“歪打正着”式的方法,直正弄明白这一问题还需要从spring的XSD文件加载机制谈起。
首先:你必须知道一点:spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),如果没有找到,才会转向去URL指定的路径下载。这是非常合理的做法,并不像看上去的那样,每次都是从站点下载的。事实上,假如你的所有配置是正确定的,你的工程完全可以在断网的情况下启动而不会报上面的错误。Spring加载xsd文件的类是PluggableSchemaResolver,你可以查看一下它的源码来验证上述说法。另外,你可以在log4j.xml文件中加入:
<logger name="org.springframework.beans.factory.xml"> <level value="all" /> </logger>
通过日志了解spring是何加载xsd文件的。
接下来,问题就是为什么spring在本地没有找到需要的文件,不得不转向网站下载。关于这个问题,其实也非常简单。在很多spring的jar包里,在META-INF目录下都有一个spring.schemas,这是一个property文件,其内容类似于下面:
我们使用eclipse编辑spring配置文件时 经常没有提示 而无从下手时 现在我们就来解决没有提示的问题
原因是因为eclipse中没有配置xsd文件
步骤一 把如下头文件拷贝到你的spring配置文件中
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:aop=
xmlns:tx=
xmlns:jdbc=
xmlns:context=
xmlns:util=
xsi:schemaLocation= context xsd
beans xsd
jdbc xsd
tx xsd
aop xsd
util xsd >
</beans>
步骤二 根据头文件的中的链接点击去下载spring对应版本的 xsd文件 到本地
步骤三 下载好之后 接下来就是要添加到eclipse中
在eclipse菜单中进入
window >prefernces >XML >XML Catalog >Add >File System 然后选择刚才下载下来的 xsd文件
location:比如C:\spring beans xsd
key type:选择Schema Location
key:填写/schema/beans/spring beans xsd
lishixinzhi/Article/program/Java/ky/201311/28723
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)