将简单的Portlet部署到Liferay - ClassCastException

时间:2010-03-02 20:20:37

标签: portlet liferay

我正在为Liferay部署最基本的Portlet:

public class FirstPortlet extends GenericPortlet
{
    @RenderMode(name="VIEW")
    public void welcomeWelcome(RenderRequest request, 
            RenderResponse response) throws  
            PortletException, IOException
    {       
        PrintWriter out = response.getWriter();
        out.println ("This is a portlet, <em>within a Portal</em>");
    }
}

在部署时,我遇到了ClassCastException:

 Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po
rtlet.Portlet

在谷歌搜索之后,似乎部署portlet.jar是一个错误 - 我已经确定我不会意外地这样做。

javax.portlet.Portlet由GenericPortlet实现,所有Portlet示例似乎都扩展了GenericPortlet,所以我认为没问题。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:8)

  

实现了javax.portlet.Portlet   通过GenericPortlet和所有Portlet   示例似乎扩展了GenericPortlet   所以我认为没问题。

如果GenericPortlet实现Portlet,我的猜测是你有类加载器问题。该类在两个不同的类加载器中加载两次,因此被认为是不同的。

  

谷歌搜索后,似乎   部署portlet.jar是一个错误 -   我确定我不是偶然的   这样做。

我仍然建议你仔细检查你是否有portlet.jar(或另一个包含Portlet的jar)在某处加载了两次。可能的位置取决于您使用的容器(Tomcat?Glassfish?)。

答案 1 :(得分:7)

这绝对是类加载问题。如果你确定,你的WAR档案中没有portlet.jar,你可以打开详细的类加载并观察从哪里加载javax.portlet.Portlet。

要将详细的类加载传递给JVM:

  

-verbose:类