Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

I have create a registration form in jsp file with jsf and I try to connect it with a web service in order to pass through this the elements to a database.

When I press submit button I get an error. I don't think that the problem concerns the connection code but I'm not sure.

Can anybody tell me something that maybe helps me in some way?

error:

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)

my form 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>

my Bean class "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";
    }
}

and the 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>
like image 613
sissy agal Avatar asked Oct 06 '11 15:10

sissy agal


2 Answers

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

This just means that the mentioned class (or a JAR file containing the class) is missing in the webapp's runtime classpath.

As the package name hints, the class is part of Apache Commons Discovery which is available for download at http://commons.apache.org/discovery. If you just drop its JAR file(s) in /WEB-INF/lib of your webapp (which is covered by webapp's runtime classpath), then this error should disappear.

Note that this problem has nothing to do with JSF/JSP, let alone Java EE. It's just basic Java. The root cause of the exception also hints that; it's of the java.lang package.

like image 68
BalusC Avatar answered Sep 17 '22 14:09

BalusC


The specified classes are missing from the project classpath at the time of execution of the test.

The solution is to add the following dependency to your pom:

<dependency>
    <groupId>commons-discovery</groupId>
    <artifactId>commons-discovery</artifactId>
    <version>0.5</version>
    <scope>test</scope> 
</dependency>
like image 27
Fadid Avatar answered Sep 17 '22 14:09

Fadid