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文件,其内容类似于下面:

这个问题真是搞了好久才搞出来……尴尬 下面是步骤,用的是MyEclipse2013做的,朋友们参考 1.window-》perference-》MyEclipse-》Files and Editors-》XML-》XML Catalog 2.选中中间的 User Specificed Entries 点击Add 3.选择 File System 按钮 找到 你从 jar包里面解压出的 .xsd 文件或 .dtd 文件 这里试例为 添加的.xsd 文件 key type:选择 Schema laction key:在自动生成的路径后面加上你插入的.xsd 文件的版本名称 如:/spring-beans-3.2.xsd 4.用的时候是这样: 在项目的src下面,点击src左击 NEW-》选中XML(Basic Templates)-》Next 5.点击上图中的Next 6、选择Select XML Catalog entry 找到你刚刚添加的后缀为.xsd文件 7.在Root Element 中找到你所用的根元素,如果你想在添加其他的后缀为.xsd文件 选择Add : 8.选择Specify New Namespace Prefix:填写标签:这里的例子为context Namespace Name:填写的是 Location Hint中的 http://www.springframework.org/schema/context Location Hint:这里我用的是:http://www.springframework.org/schema/context/spring-context-3.0.xsd 9.点击OK -》再点击Finish 就完成了,到这整个添加.xsd文件就完成了 10.注解是找到后缀为.xsd 文件按以上步骤添加进去,编辑xml文件时就自动生成了。这里添加的是http://www.springframework.org/schema/context/spring-context-3.0.xsd 文件注解。

我们使用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/bake/11489945.html

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

发表评论

登录后才能评论

评论列表(0条)

保存