2014-12-04 43 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中的包名稱並構建路徑。
相關問題