Исключение ":"java.lang.ClassCastException в Liferay Service Builder

Я работал над внедрением удаленного сервиса Entity. Я создал один метод пользовательского сервиса в EntityServiceImpl, Создал метод пользовательского сервиса, предоставляющий сервис через InstitutionServiceUtil. После развертывания портлета, при отправке запроса на метод сервиса через окно браузера, я получаю ниже Исключение

exception":"java.lang.ClassCastException: com.institutions.model.impl.InstitutionImpl 
           cannot be cast to com.institutions.model.Institution

Примечание: если я отправлю запрос после перезапуска сервера, я не получу выше исключения.

Как решить вышеупомянутое исключение?

2 ответа

Я предполагаю, что InstitutionImpl реализует интерфейс Institution, Если это так, то основной причиной исключения является загрузка классов: загрузчик классов A загрузился Institution но InstitutionImpl был загружен из другого загрузчика классов. Два класса в Java эквивалентны, только если полное имя и загрузчик классов совпадают.

Я не знаю достаточно о LifeRay, чтобы рассказать вам, как работает загрузка классов. Но чтобы решить проблему, нужно выяснить, Institution Интерфейс может уже существовать, когда вы пытаетесь загрузить свою реализацию (возможно, из предыдущей попытки развертывания).

При развертывании портлетов, которые выдают исключение приведения класса, выполните следующие действия:

  1. разверните приложение в liferay/deploy.
  2. отключить liferay
  3. переместите сервисный jar из WEB-INF/lib из портлета в /lib/ext tomcat
  4. удалить временную и рабочую папку из кота
  5. перезапустите кота.

ИЛИ... что сработало для меня

  1. изменить имя пакета при сборке service.xml в файле service.xml

Или, если вы уже создали сервис, выполните следующие действия.

  1. Просто удалите 5 пакетов, созданных в сервис-сборщике, т.е.

    model.impl

    service.base

    service.http

    service.impl

    service.persistence

  2. удалить XML-файл, созданный в папке META-INF, за исключением файла ext-spring.xml.

  3. удалите XX-service.jar из папки docroot/lib
  4. удалите служебную папку в папке docroot.
  5. измените имя пакета в service.xml и постройте путь.
Другие вопросы по тегам