web-dev-qa-db-fra.com

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

J'ai créé un formulaire d'inscription en fichier jsp avec jsf et j'essaye de le connecter avec un service web afin de passer par là les éléments à une base de données.

Lorsque j'appuie sur le bouton Envoyer, 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 manière ou d'une autre?

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 le config xml:

 <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>
19
sissy agal

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 d'exécution de la webapp.

Comme l'indique le nom du package, la classe fait partie d'Apache Commons Discovery qui est disponible en téléchargement sur http://commons.Apache.org/discovery . Si vous déposez simplement ses fichiers JAR dans /WEB-INF/lib de votre application Web (qui est couverte par le chemin d'accès aux classes d'exécution de l'application Web), cette erreur devrait disparaître.

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

21
BalusC

Les classes spécifiées sont manquantes dans le chemin d'accès aux classes du projet au moment de l'exécution du test.

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

<dependency>
    <groupId>commons-discovery</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.5</version>
    <scope>test</scope> 
</dependency>
15
Fadid