2011-10-06 2 views
15

J'ai créé un formulaire d'enregistrement dans un fichier jsp avec jsf et j'essaie de le connecter à un service web pour passer à travers les éléments une base de données.java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

Lorsque j'appuie sur le bouton Soumettre, j'obtiens une erreur. Je ne pense pas que le problème concerne le code de connexion mais je ne suis pas sûr.

Quelqu'un peut-il me dire quelque chose qui peut m'aider d'une certaine façon?

erreur:

javax.servlet.ServletException: #{formabean.submitdetails}: java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:256) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

ma forme jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<f:view> 
    <html> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
      <title>Form</title> 
     </head> 
     <body> 
      <div align="right" > 
       <p> 
        <br>............. 
<h:commandButton value="submit" type="submit" 
           action="#{formabean.submitdetails}" /> 


      </h:form> 

     </body> 
    </html> 
</f:view> 

ma classe Bean "formavar":

package org.forma; 

import org.imigrant.Migration.MigrationResult; 
import org.imigrant.Migration.MigrationWS_PortType; 
import org.imigrant.Migration.MigrationWS_Service; 
import org.imigrant.Migration.MigrationWS_ServiceLocator; 

/** libraries for Web Service*/ 
/** 
* 
* @author USER 
*/ 
public class formavar { 

    private String name; 
    private String lastname;..... 
public String getName() { 
     return name; 
    } 

    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 

    /** 
    * @return the surname 
    */ 
    public String getLastname() { 
     return lastname; 
    } 

    /** 
    * @param surname the surname to set 
    */ 
    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    }...... 
public String submitdetails() { 
     String migrationURL = "http://localhost:8080/mule-tomcat/ESB/Migration?wsdl"; 
     MigrationResult registrationResult = new MigrationResult(); 

     try { 

      MigrationWS_Service service = new MigrationWS_ServiceLocator(migrationURL); 
      MigrationWS_PortType port = service.getMigrationImplPort(); 

      registrationResult = port.registerDoc(
       null, 
       this.granting, 
       this.expire_date, 
     this.name, 
     this.lastname,............. 

        ); 


      return "OK"; 

     } catch (Exception ex) { 


      return "ERROR "+ex.getMessage(); 
     } 


     //return "OK"; 
    } 
} 

et xml config:

<managed-bean> 
     <managed-bean-name>formabean</managed-bean-name> 
     <managed-bean-class>org.forma.formavar</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
+1

La réponse BalusC est correcte. Notez que vous semblez obtenir l'erreur après un déploiement et non lors de la compilation. Pour moi, ceci indique que vous avez le jar de la découverte des communs apache, mais ne le déploie pas avec votre application. Si vous construisez un fichier war, vous pouvez placer le jar de découverte dans votre classpath runtime en le plaçant dans le répertoire/WEB-INF/lib (dans la guerre). – DwB

Répondre

17

java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

Cela signifie simplement que la classe mentionnée (ou un fichier JAR contenant la classe) est manquante dans le chemin de classe runtime de la webapp.

Comme les indications de nom de paquet, la classe fait partie d'Apache Commons Discovery qui est disponible pour téléchargement à http://commons.apache.org/discovery. Si vous venez de déposer son (s) fichier (s) JAR dans /WEB-INF/lib de votre webapp (qui est couvert par le classpath runtime de webapp), alors cette erreur devrait disparaître.

Notez que ce problème a rien de à faire avec JSF/JSP, sans parler de Java EE. C'est juste Java de base. La cause première de l'exception indique également que: c'est du paquet java.lang.

11

Les classes spécifiées sont manquantes dans le classpath du projet au moment de l'exécution du test.

La solution est d'ajouter la dépendance suivante à votre pom:

<dependency> 
    <groupId>commons-discovery</groupId> 
    <artifactId>commons-discovery</artifactId> 
    <version>0.5</version> 
    <scope>test</scope> 
</dependency> 
+0

ajouter dans votre pom: \t \t communes découverte \t communes découverte \t \t 0,5 \t \t Test Fadid

+0

Vous avez résolu mon problème! Merci! – hbobenicio

Questions connexes