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

匿名 (未验证) 提交于 2019-12-03 08:35:02

问题:

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> 

回答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.



回答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> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!