【问题标题】:Deploying a simple Portlet to Liferay - ClassCastException将一个简单的 Portlet 部署到 Liferay - ClassCastException
【发布时间】:2010-03-02 20:20:36
【问题描述】:

我正在为 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,所以我认为没问题。

谁能帮忙?

【问题讨论】:

    标签: portlet liferay


    【解决方案1】:

    javax.portlet.Portlet 已实现 由 GenericPortlet 和所有 Portlet 示例似乎扩展了 GenericPortlet 所以我认为没关系。

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

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

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

    【讨论】:

    • 太好了,谢谢 - 我现在必须离开,但我会尽快检查。我确定它确实是一个额外的 portlet.jar。但它绝对不在我的 WAR 文件中。
    • 是的,它是 Tomcat - 请参阅我对 Jaromir 的回复,portlet.jar 留在了 tomcat/webapps 目录中。
    【解决方案2】:

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

    为了让你详细的类加载将以下参数传递给 JVM:

    -详细:类

    【讨论】:

    • 哎哟。是的,感谢有关详细信息的信息:类 - 这使我能够找到答案。我怀疑这是我自己的愚蠢!我曾经部署过portlet,包括portlet.jar 文件。然后我意识到我的错误并将其从所有未来的部署中删除。但是我没有意识到 jar 文件仍然留在 tomcat /webapps 目录中。修复:从 webapps 目录中删除相应的文件夹并重新部署。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多