2014-12-04 44 views
2

我一直在实施实体远程服务。 我在EntityServiceImpl中创建了一个自定义服务方法,创建了通过InstitutionServiceUtil提供服务的自定义服务方法。 后部署portlet,而从浏览器窗口,通过发送请求到服务方法,我得到下面的异常异常“:”liferay服务构建器中的java.lang.ClassCastException

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

注意:如果我发送请求重新启动服务器后,我没有得到上面的异常。

如何解决上述异常?

+0

无论出于何种原因加载了具有相同名称的不同类或不同版本的类时,都可能发生这种情况。看起来令人气愤的是,类A不能转换为A ...类型的Java事物。 – 2016-02-05 07:20:51

回答

3

我假设InstitutionImpl实现了接口Institution。如果是这样,那么异常的根本原因是类加载:类加载器A的确加载了Institution,但是InstitutionImpl是从不同的类加载器加载的。 Java中的两个类只有在类加载器的完全限定名相同时才是等价的。

我不太了解liferay,告诉你它是如何加载类的。但是要解决这个问题,您需要确定当您尝试加载实现时(可能是以前的部署尝试),接口是否可能已经存在。

1

在部署抛出了类转换异常门户小程序,请执行下列操作:

  1. 部署Liferay的/部署应用程序。
  2. 关机Liferay的
  3. 移动从WEB-INF/lib目录服务罐子从portlet到Tomcat的/ lib/ext目录
  4. 从Tomcat
  5. 重新启动Tomcat删除临时和工作文件夹。

或者......什么工作对我来说是

  1. 变化包名在构建service.xml中在service.xml文件

或者,如果你已经建立了服务,做这些步骤

  1. 只是删除从服务建设者创造了5包, 即

    model.impl

    service.base

    service.http

    service.impl

    service.persistence

  2. 删除在META产生的.XML -INF文件夹除文件外ext-spring.xml

  3. 删除XX服务。来自docroot/lib文件夹的jar
  4. 删除docroot文件夹中的服务文件夹。
  5. 更改service.xml中的包名称并构建路径。
相关问题