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

61,288

Solution 1

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.

Solution 2

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>
Share:
61,288
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    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>
    
  • Fadid
    Fadid over 10 years
    add in your pom : <dependency> <groupId>commons-discovery</groupId> <artifactId>commons-discovery</artifactId> <version>0.5</version> <scope>test</scope> </dependency>