I'm encountering a very weird problem with Spring (3.0.1.RELEASE), TestNG (5.11) and Maven Surefire (2.5). I have a test class that extends a Spring helper class for testNG so that the test context can be loaded from an xml file (that contains some bean definitions). My project was imported into eclipse using m2eclipse (using Import Maven Project). The class runs fine in Eclipse TestNG runner. However, it 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 have eliminated all involved dependencies in my pom so that the two classes
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
and
javax.xml.parsers.DocumentBuilderFactory
are coming from JRE only (the rt.jar).
So, it looks so unbelievable to me.
I wonder if there is any mechanism in loading class that can explain for 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 can sure that I have eliminate all possible jars because when I use Open Type feature of Eclipse, it suggests only 1 class for each of DocumentBuilderFactory
and DocumentBuilderFactoryImpl