Невозможно привести к классу, потому что они находятся в безымянном модуле загрузчика «приложение»

Я пытаюсь создать 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)
  • Spring Boot 2.1.2.РЕЛИЗ
  • Грейдл 5.2

Я также загрузил проект на Github здесь: https://github.com/ciscoo/мыло-потребление-весна-загрузка

не очень уверен в wsdl здесь... но пробовали ли вы добавить module-info.java в свой проект и/или убедиться, что модуль, от которого вы зависите (для классов org.apache.cxf.endpoint.ClientImpl), разрешен в пути к модулю, а не к пути к классам.

Naman 05.02.2019 15:54

В сообщении об ошибке нет «так как». Все это дополнение говорит вам, что оба класса расположены в одном и том же модуле, безымянном модуле загрузчика 'app', что помогает читателю понять, что эта проблема совершенно не связана с модулями. ClientImpl просто не является подтипом XigniteCurrenciesSoap; это обычный ClassCastException.

Holger 10.02.2019 14:08

В моем случае было немного иначе. Исключение класса Cast иногда возникает из-за конфликта между разными версиями java. в pom.xml я установил для использования «<java.version> 1.8 </ java.version>, но в Intellje IDE я установил для использования версию java 11. после изменения версии java с 11 на 8 проблема решена для меня.

Saman Salehi 13.06.2021 17:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
73
3
142 508
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня был похожий случай, и (как упоминал @Holger в комментарии) информация о модуле в сообщении просто вводит в заблуждение - это реальный случай попытки привести что-то к чему-то, что ему не соответствует.

В вашем случае ClientImpl просто не является подтипом XigniteCurrenciesSoap.

У меня была похожая проблема, и я думал, что невозможно быть ClassCastException. Найдя этот ответ, я снова тщательно изучил исключение, и оказалось, что я расширяюсь от суперкласса с тем же именем в другом пакете. Таким образом, хотя это может выглядеть как другая проблема, на самом деле это ClassCastException.

Maarten Meeusen 19.12.2019 11:04

В то время, когда я задал вопрос, я был еще новичком в Apache CXF. Причина исключения приведения класса заключалась в том, что я использовал JaxWsClientFactoryBean вместо JaxWsProxyFactoryBean. Первый возвращает ClientImpl, а второй возвращает прокси-сервер, который вы должны выполнить. Я работаю над чем-то новым для работы и вспомнил этот вопрос.

Francisco Mateo 13.01.2021 05:39

В моем случае я пытаюсь преобразовать List<Object> в List<MyInterface> и получаю ту же проблему.

cd491415 18.10.2021 00:08

Stacktrace пытается сообщить вам, что вы преобразовали XigniteCurrenciesSoap в ClientImpl.

Например, пример ниже:

Object returnObj= getXigniteCurrenciesSoap();
return (ClientImpl) returnObj;

Вы должны выяснить, где вы сделали это в своем коде, и исправить это.

Другие вопросы по теме