Я развертываю самый основной Портлет, возможный на 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>");
}
}
На развертывании я получаю ClassCastException:
Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po
rtlet.Portlet
После поиска с помощью Google кажется, что развертывание portlet.jar является ошибкой - я удостоверился, что случайно не делаю этого.
javax.portlet. Портлет реализован GenericPortlet, и все примеры Портлета, кажется, расширяют GenericPortlet, таким образом, я предполагаю, что это в порядке.
Кто-либо может помочь?
javax.portlet.Portlet реализован GenericPortlet, и все примеры Portlet , похоже, расширяют GenericPortlet {{1} } так что я полагаю, что это нормально.
Если GenericPortlet
реализует Portlet
, я предполагаю, что у вас проблема с загрузчиком классов. Класс загружается дважды в два разных загрузчика классов и, следовательно, считается разными.
После поиска в Google выяснилось, что развертывание portlet.jar является ошибкой - Я убедился, что не случайно делаю это.
Я бы посоветовал вам дважды проверить, не загружен ли где-то дважды portlet.jar
(или другой jar, содержащий Portlet
). Возможные местоположения зависят от используемого вами контейнера (Tomcat? Glassfish?).
Это определенно проблема с загрузкой классов. Если вы уверены , что в вашем архиве WAR нет portlet.jar, вы можете включить подробную загрузку классов и посмотреть, откуда загружается javax.portlet.Portlet.
Чтобы включить подробную загрузку классов, передайте JVM следующий параметр:
-verbose: class