Развертывание простого портлета в Liferay - ClassCastException - PullRequest
6 голосов
/ 02 марта 2010

Я развертываю самый простой из возможных портлетов в 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.Portlet реализован в GenericPortlet, и все примеры портлетов, кажется, расширяют GenericPortlet, поэтому я предполагаю, что это нормально.

Кто-нибудь может помочь?

Ответы [ 2 ]

8 голосов
/ 02 марта 2010

javax.portlet.Портлет реализован по GenericPortlet и всем портлетам примеры, кажется, расширяют GenericPortlet поэтому я предполагаю, что все в порядке.

Если GenericPortlet реализует Portlet, я предполагаю, что у вас есть проблема с загрузчиком классов. Класс загружается дважды, в двух разных загрузчиках классов и, следовательно, считается разным.

После поиска в Google, кажется, что развертывание portlet.jar является ошибкой - Я убедился, что я не случайно делает это.

Я бы по-прежнему предлагал вам дважды проверить, не загружен ли где-нибудь дважды portlet.jar (или другой сосуд, содержащий Portlet). Возможные местоположения зависят от контейнера, который вы используете (Tomcat? Glassfish?).

7 голосов
/ 03 марта 2010

Это определенно проблема загрузки классов. Если вы уверены , что у вас нет portlet.jar в вашем архиве WAR, вы можете включить подробную загрузку классов и посмотреть, откуда загружен javax.portlet.Portlet.

Чтобы включить подробную загрузку классов, передайте в JVM следующий параметр:

-verbose: класс

...