IncompatibleClassChangeError
происходит, потому что некоторый код был скомпилирован для одной версии API, но во время выполнения загружается несовместимая версия API.
(В этом случае несовместимость «Реализация класса» означает, что класс был объявлен как implements Something
, но во время выполнения Something
оказывается скорее классом, чем интерфейсом. Это изменение API недопустимо .)
Проблема в том, что включенная вами трассировка стека не сообщает нам, в каком классе происходит несовместимость и с чем она несовместима. Единственная реальная подсказка в том, что CXF загружает «провайдера»
Так в чем же решение?
Серебряной пули нет. Вам нужно будет покопаться, чтобы выяснить, в чем собственно проблема:
- Проверьте журналы, откуда вы получили трассировку стека, для других сообщений журнала, которые могут сказать вам, что загружалось.
- Проверьте версии различных файлов JAR CXF на платформе времени выполнения.
- Убедитесь, что у вас нет разных версий JAR-файлов в самом веб-приложении и в каталогах общей библиотеки Tomcat.
- Измените настройки ведения журналов Tomcat, чтобы установить уровень ведения журнала для пакета
org.apache.catalina.loader
на DEBUG
. Это зарегистрирует файл JAR, из которого загружен каждый класс.