spring3.1.1与commons-dbcp1.2的冲突?
- 背景: ? ?最近项目用到了 spring mvc 和 dbcp数据源。因为以前都是用的struts2,所以没有昨天碰到的这个问题:启动spring的时候解析spring xml时候报错。
- 环境介绍: ?首先maven dependences了spring + spring mvc(version:3.1.1.RELEASE),然后配置好之后启动发现报错,错误时说bean xml的解析有问题:具体错误如下
Caused by: org.xml.sax.SAXParseException: cos-all-limited.1.2: An ''all'' model group must appear in a particle with '{'min occurs'}'='{'max occurs'}'=1, and that particle must be part of a pair which constitutes the '{'content type'}' of a complex type definition.
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:267)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:201)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
... 49 more
这个时候我的commons-dbcp用的是:
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2</version>
</dependency>
??我发现是bean xml解析有问题,我进入commons-dbcp 1.2 的pom中看看,发现其中有个依赖:
<dependency>
<groupId>xerces</groupId>
<artifactId>xerces</artifactId>
<version>2.0.2</version>
</dependency>
?于是我在我自己的POM.xml中将dbcp的dependence改为了:
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2</version>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xerces</artifactId>
</exclusion>
</dependency>
?这样子就不报错了。这就是这个xml解析的jar包冲突(具体我没时间去看源代码),后来我去看了下dbcp1.3+的pom,发现只要用1.4的就ok,不会有冲突。
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
?
- 当然,虽然问题表面解决,但是没仔细去看源代码,先记一笔,有时间去弄个究竟。
- 如果有人也碰到过类似问题,不防留言指点指点。