Spring如何加载XSD文件以及抱错

Spring如何加载XSD文件以及抱错,第1张

有时候你会发现过去一直启动正常的系统,某天启动时会报出形如下面的错误:

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11719935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存