AnsweredAssumed Answered

[Résolu] Supprimer un onglet du Navigator

Question asked by jc09 on Jun 4, 2010
Latest reply on Jun 7, 2010 by jc09
J’ai actuellement besoin de supprimer l'onglet "Mon Alfresco" dans le Navigator du webclient Alfresco.

J'ai pu assez rapidement m'apercevoir que cette modif pouvait se faire dans le component JSF UINavigator déclaré dans le fichier /WEB-INF/faces-config-repo.xml

Pour cela il me faudrait supprimer les morceaux de code suivants par rapport à la classe d'origine :

else
{
treePanel = false;
areaTitle = Application.getMessage(context, NavigationBean.MSG_MYALFRESCO);
}

et

if (NavigationBean.LOCATION_MYALFRESCO.equals(area) == false)
{
encodeSidebarButton(context, out, sideBarStyle, NavigationBean.LOCATION_MYALFRESCO, NavigationBean.MSG_MYALFRESCO);
}

Ensuite, j'ai bien évidemment eu besoin de pouvoir recompiler ma classe "customisée" avant même de pouvoir la placer dans mon module et de l'injecter dans mon .war et le problème est là…
Cette classe (UINavigator) étend d'une autre classe (SelfRenderingComponent) que je ne retrouve nul part dans le SDK d'alfresco (même dans le projet SDK AlfrescoEmbedded).
En faisant une petite recherche sous Eclipse en ayant inclus mon serveur Tomcat sur lequel mon Alfresco est déployé, j'ai pu constater que cette classe serait apparemment présente dans un jar nommé alfresco-webscript-framework.jar.

J'ai donc supprimé les morceaux de code de la classe UINavigator.java qui m'intéressaient, j'ai laissé Eclipse la recompiler avec les erreurs pensant que de toute manière une fois tout déployé sur mon serveur il retrouverait cette classe (SelfRenderingComponent) dans le classpath complet d'Alfresco, je l'ai ensuite packagée dans mon module et injectée dans mon war.
Cependant, au lancement de mon serveur, j'ai finalement l'erreur suivante :

3 juin 2010 11:16:44 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception lors de l'envoi de l'�v�nement contexte initialis� (context initialized) � l'instance de classe d'�coute (listener) org.apache.myfaces.webapp.StartupServletContextListener
java.lang.NoClassDefFoundError: SelfRenderingComponent
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
   at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
   at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:247)
   at org.apache.myfaces.shared_impl.util.ClassUtils.classForName(ClassUtils.java:134)
   at org.apache.myfaces.shared_impl.util.ClassUtils.simpleClassForName(ClassUtils.java:160)
   at org.apache.myfaces.application.ApplicationImpl.addComponent(ApplicationImpl.java:272)
   at org.apache.myfaces.config.FacesConfigurator.configureApplication(FacesConfigurator.java:608)
   at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:148)
   at org.apache.myfaces.webapp.StartupServletContextListener.initFaces(StartupServletContextListener.java:68)
   at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:51)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
   at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
   at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: SelfRenderingComponent
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
   … 41 more
3 juin 2010 11:16:44 org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' = [D:\Alfresco\tomcat\webapps\alfresco\]
3 juin 2010 11:16:45 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext

Quelqu'un serai-t-il en mesure de me donner un petit coup de pouce pour arriver à la solution ?

Pour être plus précis, je tiens à rajouter que je travail sur une version 3.0 Labs Stable d'Alfresco sur un poste Windows XP et en local tout simplement.

Au cas où certains me poseraient également la question de savoir où est-ce que j'ai intégré ma classe dans mon AMP, j'ai effectué plusieurs tests :

- j'ai simplement copier/coller la classe d'origine d'Alfresco et donc conservé les même noms de classe et de package et intégré celle-ci dans le jar que contient mon AMP (pour tenter au final d'écraser la classe d'origine au lancement d'Alfresco).

- j'ai également essayé de surcharger la configuration JSF d'origine en créant un fichier faces-config-custom.xml contenant les informations suivantes :

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>

   <!– ==================== COMPONENTS ==================== –>
   <component>
      <component-type>org.alfresco.faces.Navigator</component-type>
      <component-class>org.alfresco.web.ui.repo.component.UINavigatorCustom</component-class>
   </component>

</faces-config>

afin de tenter d'écraser la configuration de ce composant contenu dans le fichier faces-config-repo.xml

J'ai obtenu la même erreur dans les 2 cas et pourtant je pense n'être vraiment pas très loin du but, si quelqu'un sait vraiment comment procéder pour recompiler cette classe je suis preneur.

Merci par avance.

Outcomes