日期:2014-05-16  浏览次数:20526 次

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>
    ?
  • 当然,虽然问题表面解决,但是没仔细去看源代码,先记一笔,有时间去弄个究竟。
  • 如果有人也碰到过类似问题,不防留言指点指点。