开发日志:解决spring版本导致的Cannot find the declaration of element 'beans',查看jar中的spring的版本

今天想用以前搭建好了的一个简洁版ssh项目做测试,结果出现这个坑爹的错误, 解决过程相当曲折坑爹,下面开始介绍(要解决方案的可直接看蓝色字体以下的内容)


以前搭建这个项目,运作过程中一直都没出现这个错误,里面已有对User、Type表的相关操作 


重新载入项目,第一次启动时正常的,后来加2个新的实体和映射文件,再启动的时候就报了下面的错误


错误信息

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from ServletContext resource [/WEB-INF/applicationContext.xml] is invalid; nested exception isorg.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.

at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)

at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)

at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)

at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)

at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)

at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)

at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)

at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)

at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)

at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)

at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)

at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)

at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)

at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1095)

at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1617)

at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by:org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)

at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)

at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)

at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)

... 27 more



因为上一次是正常的,因此我想都没想就认为是新映射文件出了问题,但是弄了好久都没搞定,看了开发文档和网上的资料,也没发现自己哪里搞错了,实在是弄烦了,干脆把新增的内容都删掉,享受一回正常的启动再说但是没想到,再次启动居然还是报这个错误


于是乎上网去找了一下的cvc-elt.1: Cannot find the declaration of element 'beans'.解决方法

最常见的原因是缺少commons-pool.jar或spring-beans.jar,我看了下项目,当时眼瞎没有看到commons-pool.jar,很开心地去下载了个commons-pool.jar,直接放到lib中再去启动Tomcat,项目启动正常,上http://localhost 访问成功,登陆访问数据库成功

于是乎,重新在项目中添加映射文件,再次启动Tomcat:Error  cvc-elt.1: Cannot find the declaration of element 'beans'

当时的想法是:Tomcat没更新,于是乎去clean项目,还是报错,无奈之下,把commons-pool.jar删掉后再加入,成功。

为了保险起见,再重启一下Tomcat,问题又出来了,而且删除再加入的方法也不行。后来干脆删掉jar,然后重启myEclipse,再载入jar,启动成功并且新加载的映射也没问题。

接着继续去改类、映射,关掉tomcat后再启动问题又来了,难道每次我都要删了在关IDE再重启再加载jar吗?不可能!而且,弱弱的我发现了这个commons-pool.jar已经加载了,只好继续问度娘。



在众多结果中找到两个很可能的是造成我现在这种情况的:

1 spring官网问题,等官网好了就OK了的,或者修改beans头

2 IDE作死,重新排版或修改后再更新就可以了

因为第二个比较简单,因此我先试了第二个方法,修改application.xml  空格,删除 保存,不行~~~~~~~~~~~~~由于第一个方法导入的是spring-beans-2.0xsd,我一直认为自己的是spring 3.0,因此不想做修改

然后在偶然的情况下,修改了次web.xml文件,居然启动成功,而且神奇的是,基本上每次不行,只要会去改下web.xml,基本都OK,一次不行来多几次就可以了。


虽然好像找到解决方案了,但这个不管怎么想都特别的坑爹,而且有一次,修改了几次web.xml都不行,还去修改了struts2.xml、application.xml、类文件~~~~~~~~~感觉很是懊恼,找谷哥去。

谷哥的搜索的质量感觉高很多,不像度娘经常找到几年以前的东西,但也没找到我想要的答案,不过倒是看了几个修改了beans头就好的,然后不小心看到spring版本这几个字。

难道是我的spring版本和beans头的不匹配?我转而去搜索了下查看spring版本的方法

感谢这位大哥http://blog.sina.com.cn/s/blog_7725bc930100sk9c.html

1. struts的版本信息

查看 struts.jar\META-INF\MANIFEST.MF
再查看 Implementation-Version
看后面的数字..
Implementation-Version: 1.2.7


2.Spring的版本信息
查看 Spring.jar\META-INF\MANIFEST.MF
Implementation-Version: 2.0.8
Spring-Version: 2.0.8


3.hibernate3的版本信息
查看 hibernate3.jar\META-INF\MANIFEST.MF
Hibernate-Version: 3.2.3.ga
Implementation-Version: 3.2.3.ga


我直接解压了下spring.jar

通过强大的Ctrl+F在这一大串鸡肠中找到了我想要的版本号>  <

开发日志:解决spring版本导致的Cannot find the declaration of element 'beans',查看jar中的spring的版本_第1张图片

2.5的版,而我用的是3.0的配置,哭了~~~~~~~~~~(当初下载的时候那标题明明写着spring3.0啊~~~~~~~)



修改相应的beans后就再也没有出现这种情况了



而之前时行时不行的原因我认为就是1所说的网络问题,当本地找不到合适的xsd的时候,它会自动上网去找,只要网络正常就没问题,否则就会出现上述的错误。

而由于我这边或spring网络坑爹的原因,造成了时行时不行的神效果(要不要每次都在我修改后就出问题那么准时啊)


你可能感兴趣的:(开发日志,spring)