Невероятно: Нельзя разыграть из класса X в суперкласс - PullRequest
4 голосов
/ 12 апреля 2010

У меня очень странная проблема с Spring (3.0.1.RELEASE), TestNG (5.11) и Maven Surefire (2.5). У меня есть тестовый класс, который расширяет вспомогательный класс Spring для testNG, так что тестовый контекст может быть загружен из XML-файла (который содержит некоторые определения bean-компонентов). Мой проект был импортирован в Eclipse с использованием m2eclipse (с помощью Import Maven Project) Класс отлично работает в Eclipse TestNG Runner. Тем не менее, он выдает это исключение с 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)

Я удалил все вовлеченные зависимости в моем pom, чтобы два класса com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl и javax.xml.parsers.DocumentBuilderFactory приходят только от JRE (rt.jar).

Итак, мне это кажется невероятным.

Интересно, есть ли механизм в классе загрузки, который может объяснить это поведение?

Спасибо.

Обновлено: вот мое дерево зависимостей:

[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

Я могу быть уверен, что я удалил все возможные банки, потому что, когда я использую функцию Открытого Типа Eclipse, он предлагает только 1 класс для каждого из DocumentBuilderFactory и DocumentBuilderFactoryImpl

Ответы [ 3 ]

3 голосов
/ 28 января 2011

У меня была похожая проблема с DocumentBuilderFactoryImpl. Я также изначально предполагал, что причиной является конфликт в пути к классам, но на самом деле это был результат PowerMock, создавшего инструментальную версию класса (и имеющую две несовместимые версии класса в загрузчике классов). Мне не повезло с использованием @PowerMockIgnore, но в итоге я решил проблему, переместив любой объект с использованием JAXP в нестатические методы (например, используя @Before, а не @BeforeClass для создания экземпляра объекта).

1 голос
/ 16 ноября 2015

У меня была такая же проблема с SAXParserFactoryImpl и Powemock.

javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl could not be instantiated: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

Мне удалось решить проблему, игнорируя соответствующие классы из Powermock следующим образом:

@PowerMockIgnore({ "org.apache.xerces.*", "javax.xml.parsers.*", "org.xml.sax.*" })
1 голос
/ 12 апреля 2010

Скорее всего, вы столкнулись с проблемой загрузчика классов. Запустите тесты с -verbose:class, чтобы увидеть, откуда загружаются классы.

...