Javax.xml.parsers.SAXParserFactory ClassCastException

Я получаю на своей локальной машине следующее исключение при запуске тестов с помощью maven (mvn test).

[email protected] - Parser configuration error occured 
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

После поиска в Google я наткнулся на несколько страниц, которые описывают основную проблему (несколько SAXParserFactoryImpl в разных загрузчиках классов).

- > http://www.xinotes.org/notes/note/702/

Мой вопрос в том, как я могу определить, какая библиотека также предоставляет SAXParserFactoryImpl, чтобы я мог ее исключить. Я использую Maven, IntelliJ и JDK 1.6.0_23. Проблема возникает в командной строке, а также при запуске тестов из IntelliJ.

Но странная проблема заключается в том, что на сервере сборки эта проблема не возникает.

Обновление 1

Просто выяснилось, когда я запускаю первый тест mvn после mvn clean, ошибка не появляется. Но как только я снова запускаю тест mvn (без очистки, возникает исключение) (когда я запускаю его из IntelliJ).

Когда я запускаю его на линии cmd, тогда работают несколько тестовых вызовов mvn.

Ответы

Ответ 1

Я нашел проблему. Это было связано с PowerMockito, который пытался загрузить SAXParserFactory. Причина, по которой я не понял, что один из них состоял в том, что в стеке было всего два PowerMockito, а это посередине: -)

Итак, если вы выясните эту проблему в IntelliJ, и вы используете PowerMockito, аннотируйте свой тестовый класс со следующей аннотацией:

@PowerMockIgnore(["javax.management.*", "javax.xml.parsers.*",
         "com.sun.org.apache.xerces.internal.jaxp.*", "ch.qos.logback.*", "org.slf4j.*"])

Это решило проблему в моем случае.

Ответ 2

У вашего JDK, вероятно, есть свой собственный SAXParserFactoryImpl.

Проверяйте такие банки, как xercesImpl, xml/xml-api и sax.

Один из ваших серверов, вероятно, будет использоваться на сервере.

Вы можете использовать jarfinder: http://www.jarfinder.com/index.php/java/search/~SAXParserFactoryImpl~