2016-04-07 9 views
1

私はDocumentAndMediaからフックを作りました。 portal.propertiesでは、com.liferay.portlet.documentlibrary.action.EditFileEntryAction = com.mycompany.acciones.Testを書きました。ファイルエントリビューを見ると、ファイルエントリを取得できます。私は、いくつかの追加のプロパティを取得するためにFileEntry.getModel()からFileEntryをorg.apache.chemistry.opencmis.client.runtime.DocumentImplドキュメントにキャストしたいが、例外はスローされる。Liferay DocumentAndMedia with CMIS

テスト・アクション・クラス

package com.mycompany.acciones; 

import javax.portlet.*; 
import org.apache.chemistry.opencmis.client.runtime.*; 
import com.liferay.portal.kernel.repository.model.*; 
import com.liferay.portal.kernel.struts.*; 
import com.liferay.portal.kernel.util.*; 

public class Test extends BaseStrutsPortletAction{ 

    public void processAction(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { 

     originalStrutsPortletAction.processAction(originalStrutsPortletAction, portletConfig, actionRequest, actionResponse); 
    } 

    @Override 
    public String render(StrutsPortletAction originalStrutsPortletAction,PortletConfig portletConfig,RenderRequest renderRequest, RenderResponse renderResponse) throws Exception { 

     String ret = originalStrutsPortletAction.render(null, portletConfig, renderRequest, renderResponse); 
     renderRequest.setAttribute(WebKeys.PORTLET_DECORATE, Boolean.TRUE); 

     FileEntry fileEntry = (FileEntry)renderRequest.getAttribute("DOCUMENT_LIBRARY_FILE_ENTRY"); 

     // Exception is throws here 
     DocumentImpl doc = (DocumentImpl)fileEntry.getModel();  

     String propertyName = doc.getProperties().get(0).getDisplayName(); 
     String propertyvalue = doc.getProperties().get(0).getValue(); 

     String propertyName2 = doc.getProperties().get(1).getDisplayName(); 
     String propertyvalue2 = doc.getProperties().get(1).getValue(); 

     return ret; 
    } 
} 

STACKTRACE

17:33:52,796 ERROR [http-bio-8080-exec-398][render_portlet_jsp:154] java.lang.ClassCastException: org.apache.chemistry.opencmis.client.runtime.DocumentImpl cannot be cast to org.apache.chemistry.opencmis.client.runtime.DocumentImpl 
    at com.mycompany.acciones.Test.render(Test.java:31) 
    at com.liferay.portal.kernel.bean.ClassLoaderBeanHandler.invoke(ClassLoaderBeanHandler.java:67) 
    at com.liferay.portal.struts.PortletActionAdapter.render(PortletActionAdapter.java:74) 
    at com.liferay.portal.struts.PortletAction.execute(PortletAction.java:111) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) 
    at com.liferay.portal.struts.PortletRequestProcessor.processActionPerform(PortletRequestProcessor.java:441) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 
    at com.liferay.portal.struts.PortletRequestProcessor.process(PortletRequestProcessor.java:224) 
    at com.liferay.portlet.StrutsPortlet.include(StrutsPortlet.java:274) 
    at com.liferay.portlet.StrutsPortlet.doView(StrutsPortlet.java:153) 
    at com.liferay.portal.kernel.portlet.LiferayPortlet.doDispatch(LiferayPortlet.java:218) 
    at javax.portlet.GenericPortlet.render(GenericPortlet.java:233) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100) 
    at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64) 
    at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:548) 
    at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:607) 
    at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java:359) 
    at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1207) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

答えて

0

クラスは、あなたは間違いなく自分に不利なクラスを持っているか、その(でも自分自身に)それが合法的に必要があることを別のクラスに型変換することができない場合クラスパス上でスーパークラスを2回実行します。クラスパスに重複がないか調べて解決します。これは、tomcatのグローバルクラスパス(tomcat/lib、またはLiferayの場合はtomcat/lib/ext)またはWebアプリケーション(そのWEB-INF/libまたはWEB-INF/classes)にあるライブラリである可能性があります。 。それは、複数の余分なものを取り除くと同じ名前を持つクラスの実装

、再起動をだとして、またはそれらのすべての組み合わせは(、もう一度試して

+0

お返事ありがとうございました。わたしにはできる!私はapache化学ライブラリ(webapps/root/web-inf/lib)をtomcat/lib/extに移動し、myhook/web-inf/libから削除しなければならなかった –

0

パッケージテスト;。

import javax.portlet.ActionRequest; 
import javax.portlet.ActionResponse; 
import javax.portlet.PortletConfig; 
import javax.portlet.RenderRequest; 
import javax.portlet.RenderResponse; 

import com.liferay.portal.kernel.repository.model.FileEntry; 
import com.liferay.portal.kernel.struts.BaseStrutsPortletAction; 
import com.liferay.portal.kernel.struts.StrutsPortletAction; 
import com.liferay.portal.kernel.util.WebKeys; 
import com.liferay.portlet.documentlibrary.model.DLFileEntry; 

public class EditFileEntryAction extends BaseStrutsPortletAction { 

    public void processAction(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { 

      originalStrutsPortletAction.processAction(originalStrutsPortletAction, portletConfig, actionRequest, actionResponse); 
     } 

     @Override 
     public String render(StrutsPortletAction originalStrutsPortletAction,PortletConfig portletConfig,RenderRequest renderRequest, RenderResponse renderResponse) throws Exception { 

      String ret = originalStrutsPortletAction.render(null, portletConfig, renderRequest, renderResponse); 
      renderRequest.setAttribute(WebKeys.PORTLET_DECORATE, Boolean.TRUE); 

      FileEntry fileEntry = (FileEntry)renderRequest.getAttribute("DOCUMENT_LIBRARY_FILE_ENTRY"); 

      // Exception is throws here 
      DLFileEntry doc = (DLFileEntry)fileEntry.getModel();  


      return ret; 
     } 
} 

これは私のために働いたが、キャストはDocumentImplではなくDLFileEntryである。

なぜorg.apache.chemistry.opencmis.client.runtime.DocumentImplが必要なのか、getModel()がこのタイプのオブジェクト?

+0

あなたの答えに感謝します。私はLifeImageでcmisの実装を使用しているため、DocumentImplを使用しています。このオブジェクトから、DLFileEntryにはないいくつかの余分な属性が必要です。メソッドfileEntry.getModel()はObjectを返しますが、CmisFileEntry.getModel()はcmisドキュメントを返します –