2011-10-06 154 views
15

He creado un formulario de registro en el archivo jsp con jsf y trato de conectarlo con un servicio web para pasar los elementos a una base de datosjava.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

Cuando presiono el botón de enviar me sale un error. No creo que el problema se relacione con el código de conexión, pero no estoy seguro.

¿Alguien puede decirme algo que tal vez me ayude de alguna manera?

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) 

mi formulario 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> 

mi grano de clase "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"; 
    } 
} 

y el xml de configuración:

<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

El BalusC respuesta es correcta. Tenga en cuenta que parece estar recibiendo el error después de una implementación y no durante la compilación. Para mí, esto indica que tienes el contenedor de descubrimiento de Apache commons, pero no lo estás implementando con tu aplicación. Si está construyendo un archivo war, puede colocar el contenedor de descubrimiento en classpath en tiempo de ejecución colocándolo en el directorio/WEB-INF/lib (en la guerra). – DwB

Respuesta

17

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

Esto solo significa que la clase mencionada (o un archivo JAR que contiene la clase) falta en el classpath del tiempo de ejecución de la aplicación web.

Tal como lo indica el nombre del paquete, la clase es parte de Apache Commons Discovery, que se puede descargar en http://commons.apache.org/discovery. Si acaba de soltar su (s) archivo (s) JAR en /WEB-INF/lib de su aplicación web (que está cubierta por el classpath de tiempo de ejecución de webapp), entonces este error debería desaparecer.

Tenga en cuenta que este problema tiene nada que ver con JSF/JSP, y mucho menos Java EE. Es solo Java básico. La causa raíz de la excepción también lo insinúa; es del paquete java.lang.

11

Las clases especificadas faltan en el classpath del proyecto en el momento de la ejecución de la prueba.

La solución es añadir la siguiente dependencia a su pom:

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

agrega en su pom: \t \t Commons-descubrimiento \t Commons-descubrimiento \t \t 0,5 \t \t prueba Fadid

+0

Resolviste mi problema! ¡Gracias! – hbobenicio

Cuestiones relacionadas