I had a very strange problem with Spring (3.0.1.RELEASE), TestNG (5.11) and Maven Surefire (2.5). I have a test class that extends the Spring helper class for testNG, so the test context can be loaded from an XML file (which contains some bean definitions). My project was imported into eclipse using m2eclipse (using Import Maven Project). The class works fine in Eclipse TestNG. However, this throws this exception with Maven Surefire
Caused by: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl cannot be cast to javax.xml.parsers.DocumentBuilderFactory at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:123) at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:89) at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
I removed all the related dependencies in my pom so that the two classes com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl and javax.xml.parsers.DocumentBuilderFactory come only from JRE (rt.jar).
So it looks incredible to me.
I wonder if there is any mechanism in the loading class that can explain this behavior?
Thanks.
Updated: Here is my dependency tree:
[INFO] org.seamoo:seamoo-webapp:war:1.0-SNAPSHOT [INFO] +- com.google.appengine:appengine-api-1.0-sdk:jar:1.3.1:compile [INFO] +- com.google.gwt:gwt-servlet:jar:2.0.3:compile [INFO] +- com.google.gwt:gwt-user:jar:2.0.3:provided [INFO] +- org.apache.geronimo.specs:geronimo-servlet_2.5_spec:jar:1.2:provided [INFO] +- org.slf4j:slf4j-api:jar:1.5.6:compile [INFO] +- ch.qos.logback:logback-classic:jar:0.9.15:compile [INFO] | \- ch.qos.logback:logback-core:jar:0.9.15:compile [INFO] +- org.springframework:spring-webmvc:jar:3.0.1.RELEASE:compile [INFO] | +- org.springframework:spring-asm:jar:3.0.1.RELEASE:compile [INFO] | +- org.springframework:spring-beans:jar:3.0.1.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:3.0.1.RELEASE:compile [INFO] | | \- org.springframework:spring-aop:jar:3.0.1.RELEASE:compile [INFO] | +- org.springframework:spring-core:jar:3.0.1.RELEASE:compile [INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile [INFO] | +- org.springframework:spring-expression:jar:3.0.1.RELEASE:compile [INFO] | \- org.springframework:spring-web:jar:3.0.1.RELEASE:compile [INFO] | \- aopalliance:aopalliance:jar:1.0:compile [INFO] +- org.springframework:spring-context-support:jar:3.0.1.RELEASE:compile [INFO] +- org.apache.tiles:tiles-jsp:jar:2.1.4:compile [INFO] | \- org.apache.tiles:tiles-servlet:jar:2.1.4:compile [INFO] +- org.apache.tiles:tiles-portlet:jar:2.1.4:compile [INFO] | \- org.apache.tiles:tiles-core:jar:2.1.4:compile [INFO] | +- org.apache.tiles:tiles-api:jar:2.1.4:compile [INFO] | +- commons-digester:commons-digester:jar:1.8.1:compile [INFO] | | \- commons-beanutils:commons-beanutils:jar:1.8.0:compile [INFO] | \- commons-logging:commons-logging-api:jar:1.1:compile [INFO] +- org.apache.tomcat:jasper-el:jar:6.0.26:compile [INFO] | \- org.apache.tomcat:el-api:jar:6.0.26:compile [INFO] +- org.freemarker:freemarker:jar:2.3.16:compile [INFO] +- org.tuckey:urlrewritefilter:jar:3.1.0:compile [INFO] +- org.seamoo.utils:converter:jar:0.1:compile [INFO] +- junit:junit:jar:4.6:test [INFO] +- org.springframework:spring-test:jar:3.0.1.RELEASE:test [INFO] +- org.testng:testng:jar:jdk15:5.11:test [INFO] +- net.sourceforge.htmlunit:htmlunit:jar:2.7:test [INFO] | +- commons-collections:commons-collections:jar:3.2.1:test [INFO] | +- commons-lang:commons-lang:jar:2.4:test [INFO] | +- commons-httpclient:commons-httpclient:jar:3.1:test [INFO] | +- commons-codec:commons-codec:jar:1.4:test [INFO] | +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.7:test [INFO] | +- net.sourceforge.nekohtml:nekohtml:jar:1.9.14:test [INFO] | +- net.sourceforge.cssparser:cssparser:jar:0.9.5:test [INFO] | | \- org.w3c.css:sac:jar:1.3:test [INFO] | \- commons-io:commons-io:jar:1.4:test [INFO] +- org.jbehave:jbehave-core:jar:2.5:test [INFO] | +- junit:junit-dep:jar:4.4:test [INFO] | \- org.hamcrest:hamcrest-all:jar:1.1:test [INFO] +- org.mockito:mockito-all:jar:1.8.4:test [INFO] +- org.powermock.modules:powermock-module-testng:jar:1.3.7:test [INFO] | \- org.powermock:powermock-core:jar:1.3.7:test [INFO] | +- org.powermock.reflect:powermock-reflect:jar:1.3.7:test [INFO] | | \- org.objenesis:objenesis:jar:1.2:test [INFO] | \- javassist:javassist:jar:3.10.0.GA:test [INFO] +- org.powermock.api:powermock-api-mockito:jar:1.3.7:test [INFO] | \- org.powermock.api:powermock-api-support:jar:1.3.7:test [INFO] +- org.workingonit:gwtbridge:jar:0.1:compile [INFO] +- org.seleniumhq.selenium.client-drivers:selenium-java-testng-helper:jar:1.0.1:test [INFO] | \- org.seleniumhq.selenium.client-drivers:selenium-java-client-driver:jar:1.0.1:test [INFO] +- com.dyuproject:dyuproject-util:jar:1.1-SNAPSHOT:compile [INFO] +- com.dyuproject:dyuproject-openid:jar:1.1-SNAPSHOT:compile [INFO] +- org.mortbay.jetty:jetty-util:jar:6.1.22:compile [INFO] +- org.seamoo:seamoo-model:jar:1.0-SNAPSHOT:compile [INFO] | +- javax.jdo:jdo2-api:jar:2.3-eb:compile [INFO] | +- javax.transaction:jta:jar:1.1:compile [INFO] | \- com.google.appengine:geronimo-jpa_3.0_spec:jar:1.1.1:compile [INFO] +- org.seamoo:seamoo-persistence:jar:1.0-SNAPSHOT:compile [INFO] | +- com.google.appengine.orm:datanucleus-appengine:jar:1.0.5.final:compile [INFO] | +- org.datanucleus:datanucleus-core:jar:1.1.5:compile [INFO] | \- com.google.appengine:datanucleus-jpa:jar:1.1.5:runtime [INFO] +- org.seamoo:seamoo-theme:jar:1.0-SNAPSHOT:compile [INFO] \- org.seamoo:seamoo-test-resources:jar:1.0-SNAPSHOT:test [INFO] +- com.google.appengine:appengine-api-labs:jar:1.3.1:test [INFO] +- com.google.appengine:appengine-api-stubs:jar:1.3.1:test [INFO] \- com.google.appengine:appengine-testing:jar:1.3.1:test
I am sure that I eliminated all possible banks, because when I use Open Type for Eclipse, it offers only 1 class for each of DocumentBuilderFactory and DocumentBuilderFactoryImpl
source share