Faire sa propre classe GenericPortlet : ClassCastException
Bonjour,
je souhaite fournir à des développeurs un modèle de portlet, avec des actions déjà implémentée que leurs portlets devront proposer.
Je pensais donc leur filer ma propre classe abstraite (MyGenericPortlet) qui héritera de GenericPortlet et dont ils devront hériter. Ce qui me donne en gros ceci :
Code:
1 2 3 4 5 6 7 8
|
abstract class MyGenericPortlet extends GenericPortlet {
// [...]
public void doGenericAction(RenderRequest request, RenderResponse response)
throws PortletException, java.io.IOException {
addToBasketView.include(request, response);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10
|
public class MyPortlet extends MyGenericPortlet {
public void doView( RenderRequest request, RenderResponse response )
throws PortletException, IOException {
}
protected void doHelp( RenderRequest request, RenderResponse response )
throws PortletException, IOException {
}
} |
Cela compile bien dans Eclipse, le build Maven est OK, par contre au déploiement dans Tomcat/Pluto, voici ce que j'obtiens :
Code:
1 2 3 4 5 6
|
java.lang.ClassCastException: com.ibm.MyPortlet cannot be cast to javax.portlet.Portlet
at org.apache.pluto.container.driver.PortletServlet.attemptRegistration(PortletServlet.java:210)
at org.apache.pluto.container.driver.PortletServlet$1.run(PortletServlet.java:166)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462) |
J'utilise la portlet-api 1.0. "portlet-class" dans portlet.xml référence MyPortlet.
Donc deux questions :
- est-ce que la voie que je prends (intercaler une classe entre GenericPortlet et celle de chaque portlet) vous parait la mieux adaptée à ce que je veux faire ?
- pourquoi est-ce que ça ne fonctionne pas, qu'est-ce que c'est que cette erreur de Cast ? J'ai bien cherché sur le net mais franchement, je ne trouve pas grand chose.
Et si je fait bien hériter MyPortlet directement de GenericPortlet, ça fonctionne.
Merci d'avance :)