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~