I'm deploying the most basic Portlet possible to Liferay:
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>");
}
}
On deployment, I'm getting a ClassCastException:
Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po
rtlet.Portlet
After Googling, it appears that deploying portlet.jar is a mistake - I've made sure I'm not accidentally doing this.
javax.portlet.Portlet is implemented by GenericPortlet, and all Portlet examples seem to extend GenericPortlet so I assume that's ok.
Can anyone help?
If
GenericPortlet
implementsPortlet
, my guess is that you have a class loader issue. The class is loaded twice, in two different class loaders and are by consequence considered different.I would still suggest that you double check if you don't have
portlet.jar
(or another jar which containsPortlet
) loaded twice somewhere. The possible locations depend on the container you are using (Tomcat? Glassfish? ).This is definitely classloading issue. If you are sure you don't have portlet.jar in your WAR archive you can turn on verbose classloading and watch where is the javax.portlet.Portlet loaded from.
To turn you verbose classloading pass following parameter to the JVM: