2011-10-06 12 views
15

Ho creato un modulo di registrazione nel file jsp con jsf e provo a collegarlo con un servizio web per passare attraverso questo gli elementi a un database.java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

Quando si preme il pulsante di invio viene visualizzato un errore. Non penso che il problema riguardi il codice di connessione, ma non ne sono sicuro.

Qualcuno può dirmi qualcosa che forse mi aiuta in qualche modo?

errore:

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) 

mia forma 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> 

mia Bean classe "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"; 
    } 
} 

e l'xml di configurazione:

<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

La BalusC risposta è corretta. Si noti che sembra che si sia verificato l'errore dopo una distribuzione e non durante la compilazione. Per me, questo indica che hai il barattolo di scoperta di Apache Commons, ma non lo stai distribuendo con la tua applicazione. Se si sta costruendo un file di guerra, è possibile inserire il jar di scoperta nel classpath di runtime posizionandolo nella directory/WEB-INF/lib (in the war). – DwB

risposta

17

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

Ciò significa semplicemente che la classe menzionata (o un file JAR contenente la classe) è mancante nel percorso di runtime del webapp.

Come suggerisce il nome del pacchetto, la classe fa parte di Apache Commons Discovery che è disponibile per il download allo http://commons.apache.org/discovery. Se si rilasciano i suoi file JAR nello /WEB-INF/lib della tua webapp (che è coperta dal percorso classe di runtime di webapp), allora questo errore dovrebbe scomparire.

Si noti che questo problema ha nulla da da fare con JSF/JSP, per non parlare di Java EE. È solo Java di base. La causa principale dell'eccezione indica anche che; è del pacchetto java.lang.

11

Le classi specificate mancano dal percorso di classe del progetto al momento dell'esecuzione del test.

La soluzione è quella di aggiungere la seguente dipendenza al vostro pom:

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

aggiungere nella tua pom: \t \t commons-scoperta \t commons-scoperta \t \t 0,5 \t \t prova Fadid

+0

Hai risolto il mio problema! Grazie! – hbobenicio

Problemi correlati