2012-03-12 18 views
31

Sto tentando di ottenere una richiesta dal servlet GWT per ottenere la risposta JSON da un servizio Web. seguito è il codice nel mio servlet:java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient

public String getQueData() throws IllegalArgumentException { 
    String message = null; 
    try {   
     HttpClient httpclient = new DefaultHttpClient(); 
     JSONParser parser = new JSONParser(); 

     String url = "working - url"; 
     HttpResponse response = null; 
     response = httpclient.execute(new HttpGet(url)); 

     JSONObject json_data = null; 
     json_data = (JSONObject)parser.parse(EntityUtils.toString(response.getEntity())); 
     JSONArray results = (JSONArray)json_data.get("result"); 
     for (Object queid : results) { 
      message = message.concat((String) ((JSONObject)queid).get("id")); 
      message = message.concat("\t"); 
      message = message.concat((String) ((JSONObject)queid).get("owner")); 
      message = message.concat("\n"); 
     } 
     } catch (Exception e) { 
    message = e.toString(); 
    } 
    return message; 
} 

Ottenere la seguente eccezione sul tentativo di rendere richiesta GET da un servlet GWT.

java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    at java.lang.Class.getConstructor0(Class.java:2699) 
    at java.lang.Class.newInstance0(Class.java:326) 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428) 
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:362) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.HttpClient 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

Quale potrebbe essere la possibile causa di questa eccezione? Come può essere rimosso?

Sto usando jdk1.6.0_30 su ubuntu 10.04.

risposta

23

What could be the possible cause of this exception?

Potrebbe non essere appropriato Jar nel percorso di classe.

How it could be removed?

Mettendo HTTPClient vaso nel vostro percorso di classe. Se si tratta di una webapp, copiare vaso in WEB-INF/lib se è autonomo, assicurarsi di avere questo barattolo in percorso di classe o esplicitamente impostato utilizzando -cp opzione

come doc dice,

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

+0

grazie per questo, ma ora sto ricevendo questo errore com.google.gwt.user.server.rpc.UnexpectedException –

+0

Non sono sicuro della nuova eccezione, sapevo poco di ciò che causa NoClassDefFound e l'ho condiviso con tu. – Nishant

+0

Grazie per la risposta –

42

Se il suo un progetto Maven, aggiungere la dipendenza di seguito nel file pom

<dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.3.4</version> 
    </dependency> 
+3

E per Gradle: 'gruppo di compilazione: 'org.apache.httpcomponents', nome: 'httpclient', versione: '4.5.2'' – gudthing

1

ho risolto questo problema per me, ho trovato c'è stato due file di http-client con versione diversa di altri file jAR dipendenti. Quindi ci possono versione crollavano tra le biblioteche file in modo da rimuovere tutti i vecchi/precedente biblioteche file e ri-add sono file JAR dalla cartella lib di questo file zip:

Donwload Zip file from here

+0

Non ha funzionato per me .. nessun beneficio per il download. – Madhab452

2

stavo affrontando lo stesso problema. Nel mio caso, ho avuto una dipendenza da httpclient con una versione precedente mentre sendgrid richiedeva una versione più recente di httpclient. Assicurati che la versione di httpclient sia corretta nelle dipendenze e funzionerebbe correttamente.

+1

salva-vita .. cambiato httpclient da 4.3.5 a 4.5.3. ha funzionato bene – user3014595

1

Questo problema si verifica in presenza di diverse versioni jar. Soprattutto versioni di httpcore e httpclient. Usa le stesse versioni di httpcore e httpclient.

Problemi correlati