Я пытаюсь создать bean-компонент из источников, сгенерированных wsdl2java.
Каждый раз, когда я пытаюсь запустить приложение Spring Boot, я получаю следующую ошибку:
Caused by: java.lang.ClassCastException: class org.apache.cxf.endpoint.ClientImpl cannot be cast to class com.xignite.services.XigniteCurrenciesSoap (org.apache.cxf.endpoint.ClientImpl and com.xignite.services.XigniteCurrenciesSoap are in unnamed module of loader 'app')
Я не уверен, как именно мне включить сгенерированные источники в мое основное приложение Spring Boot в качестве модуля.
Моя структура каталогов:
├── build
│ └── generatedsources
│ └── src
│ └── main
│ └── java
│ └── com
│ └── xignite
│ └── services
│
└── src
└── main
├── java
│ └── io
│ └── mateo
│ └── stackoverflow
│ └── soapconsumption
└── resources
└── wsdls
Соответствующая системная информация:
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Я также загрузил проект на Github здесь: https://github.com/ciscoo/мыло-потребление-весна-загрузка
В сообщении об ошибке нет «так как». Все это дополнение говорит вам, что оба класса расположены в одном и том же модуле, безымянном модуле загрузчика 'app', что помогает читателю понять, что эта проблема совершенно не связана с модулями. ClientImpl просто не является подтипом XigniteCurrenciesSoap; это обычный ClassCastException.
В моем случае было немного иначе. Исключение класса Cast иногда возникает из-за конфликта между разными версиями java. в pom.xml я установил для использования «<java.version> 1.8 </ java.version>, но в Intellje IDE я установил для использования версию java 11. после изменения версии java с 11 на 8 проблема решена для меня.




У меня был похожий случай, и (как упоминал @Holger в комментарии) информация о модуле в сообщении просто вводит в заблуждение - это реальный случай попытки привести что-то к чему-то, что ему не соответствует.
В вашем случае ClientImpl просто не является подтипом XigniteCurrenciesSoap.
У меня была похожая проблема, и я думал, что невозможно быть ClassCastException. Найдя этот ответ, я снова тщательно изучил исключение, и оказалось, что я расширяюсь от суперкласса с тем же именем в другом пакете. Таким образом, хотя это может выглядеть как другая проблема, на самом деле это ClassCastException.
В то время, когда я задал вопрос, я был еще новичком в Apache CXF. Причина исключения приведения класса заключалась в том, что я использовал JaxWsClientFactoryBean вместо JaxWsProxyFactoryBean. Первый возвращает ClientImpl, а второй возвращает прокси-сервер, который вы должны выполнить. Я работаю над чем-то новым для работы и вспомнил этот вопрос.
В моем случае я пытаюсь преобразовать List<Object> в List<MyInterface> и получаю ту же проблему.
Stacktrace пытается сообщить вам, что вы преобразовали XigniteCurrenciesSoap в ClientImpl.
Например, пример ниже:
Object returnObj= getXigniteCurrenciesSoap();
return (ClientImpl) returnObj;
Вы должны выяснить, где вы сделали это в своем коде, и исправить это.
не очень уверен в wsdl здесь... но пробовали ли вы добавить
module-info.javaв свой проект и/или убедиться, что модуль, от которого вы зависите (для классовorg.apache.cxf.endpoint.ClientImpl), разрешен в пути к модулю, а не к пути к классам.