web-dev-qa-db-fra.com

java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener lors de l'utilisation de MyFaces avec WASCE / Geronimo

J'essaie de créer une application Web JSF simple à l'aide de MyFaces v 2.1 avec WebSphere Application Server Community Edition v3.0.0.1 et Eclipse Juno mais lorsque j'essaie d'exécuter l'application, l'erreur suivante est renvoyée

    Java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener
org.Apache.geronimo.common.DeploymentException: Java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener
    at org.Apache.geronimo.web25.deployment.AbstractWebModuleBuilder.createWebAppClassFinder(AbstractWebModuleBuilder.Java:665)
    at org.Apache.geronimo.web25.deployment.AbstractWebModuleBuilder.configureBasicWebModuleAttributes(AbstractWebModuleBuilder.Java:698)
    at org.Apache.geronimo.Tomcat.deployment.TomcatModuleBuilder.addGBeans(TomcatModuleBuilder.Java:469)
    at org.Apache.geronimo.j2ee.deployment.SwitchingModuleBuilder.addGBeans(SwitchingModuleBuilder.Java:174)
    at org.Apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.Java:764)
    at org.Apache.geronimo.deployment.Deployer.deploy(Deployer.Java:255)
    at org.Apache.geronimo.deployment.Deployer.deploy(Deployer.Java:140)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:60)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:37)
    at Java.lang.reflect.Method.invoke(Method.Java:611)
    at org.Apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.Java:34)
    at org.Apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.Java:131)
    at org.Apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.Java:883)
    at org.Apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.Java:245)
    at org.Apache.geronimo.kernel.KernelGBean.invoke(KernelGBean.Java:344)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:60)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:37)
    at Java.lang.reflect.Method.invoke(Method.Java:611)
    at org.Apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.Java:34)
    at org.Apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.Java:131)
    at org.Apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.Java:883)
    at org.Apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.Java:245)
    at org.Apache.geronimo.system.jmx.MBeanGBeanBridge.invoke(MBeanGBeanBridge.Java:172)
    at com.Sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.Java:848)
    at com.Sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.Java:773)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.Java:1438)
    at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.Java:83)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.Java:1276)
    at Java.security.AccessController.doPrivileged(AccessController.Java:284)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.Java:1378)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.Java:799)
    at Sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:37)
    at Java.lang.reflect.Method.invoke(Method.Java:611)
    at Sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.Java:322)
    at Sun.rmi.transport.Transport$1.run(Transport.Java:171)
    at Java.security.AccessController.doPrivileged(AccessController.Java:284)
    at Sun.rmi.transport.Transport.serviceCall(Transport.Java:167)
    at Sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.Java:547)
    at Sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.Java:802)
    at Sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.Java:661)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:897)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:919)
    at Java.lang.Thread.run(Thread.Java:736)
Caused by: Java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.Java:513)
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.Java:429)
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.Java:417)
    at org.Apache.geronimo.hook.equinox.GeronimoClassLoader.loadClass(GeronimoClassLoader.Java:85)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:626)
    at org.Eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.Java:345)
    at org.Eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.Java:229)
    at org.Eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.Java:1207)
    at org.Apache.geronimo.web25.deployment.AbstractWebModuleBuilder.addClass(AbstractWebModuleBuilder.Java:670)
    at org.Apache.geronimo.web25.deployment.AbstractWebModuleBuilder.createWebAppClassFinder(AbstractWebModuleBuilder.Java:661)
    ... 45 more

Vraisemblablement, l'erreur se produit parce que les fichiers JAR MyFaces ne se trouvent pas dans le chemin d'accès aux classes, mais je ne peux pas comprendre où je me trompe car le chemin de génération dans Eclipse contient les fichiers JAR requis. J'ai également essayé de copier les fichiers jar dans le répertoire WEB-INF/lib mais en vain.

La capture d'écran ci-dessous montre la structure du projet ainsi que les bibliothèques.

Eclipse Project Structure

Existe-t-il quelque chose de spécifique que je dois faire dans Eclipse ou WASCE pour inclure les fichiers jar ou le problème se situe-t-il ailleurs?

19
Paul H
Caused by: Java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener

La classe manquante fait partie de Mojarra , qui est en fait le concurrent de MyFaces .

Vous ne devriez pas du tout avoir besoin de cette classe lorsque vous utilisez MyFaces. Cette exception peut avoir les causes possibles suivantes:

  • Il y a une entrée <listener> Définie manuellement dans le web.xml De l'application Web ou le web-fragment.xml De l'un des fichiers JAR déployés dans /WEB-INF/lib Qui fait référence à cette classe d'écouteur spécifique à Mojarra.

  • Il y a quelque part un fichier Mojarra .tld Lâche dans le chemin de classe (très peu probable, qui pourrait extraire un fichier JAR et mettre son contenu lâche dans le chemin de classe?). Les fichiers TLD sont auto-initialisés et peuvent contenir une entrée <listener> Qui peut déclencher l'enregistrement automatique d'une implémentation ServletContextListener (telle que Mojarra ConfigureListener).

Ces conflits peuvent être résolus simplement en les supprimant.

31
BalusC

J'ai déployé une application web avec Myfaces sur un serveur Jetty et il a fallu utiliser un écouteur et un paramètre d'initialisation supplémentaire pour utiliser les facettes:

<context-param>
    <param-name>org.Apache.myfaces.FACES_INITIALIZER </param-name>
    <param-value>org.Apache.myfaces.webapp.FaceletsInitilializer</param-value>
</context-param>
<listener>
     <listener-class>org.Apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
4

J'étais avec le même problème. Lorsque j'ai essayé d'exécuter un fichier .html avec Eclipse en utilisant Tomcat7 comme serveur local, j'ai reçu l'erreur 404 sur le navigateur. Et dans la console d'Eclipse montrait l'erreur "ClassNotFoundException: com.Sun.faces.config.ConfigureListener".

Le problème était la bibliothèque Mojarra (.jar) que j'utilisais dans mon projet Dynamic Web. J'utilisais javax.faces-2.3.0-m04.jar.

-> Solution:

Téléchargez une version plus ancienne sur les référentiels de Mojarra https://maven.Java.net/content/repositories/releases/org/glassfish/javax.faces/ . Dans mon cas, j'ai téléchargé la version 2.2.7 (javax.faces-2.2.7.jar).

J'ai ensuite créé un nouveau projet Web dynamique dans Eclipse à l'aide de JSF v2.0 et affecté avec le fichier javax.faces-2.2.7.jar dans la section bibliothèque.

1
Fernando Costa

J'utilisais l'implémentation de mojarra pour la compilation et je comptais sur Apache Tomcat pour l'exécution. Mais Tomcat utilise l'implémentation myfaces. Il a donc fallu inclure le pot d'im mojarra dans le WEB-INF/lib pour résoudre le problème

1
Pramod Shivale