Domanda

Sto cercando di effettuare una richiesta Ottieni dal servlet GWT per ottenere la risposta JSON da un servizio Web. Di seguito è riportato il codice nel mio servlet:

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 effettuare la richiesta di ricezione 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 causa possibile di questa eccezione? Come potrebbe essere rimosso?

Sto usando JDK1.6.0_30 su Ubuntu 10.04.

È stato utile?

Soluzione

.

Quale potrebbe essere la causa possibile di questa eccezione?

Potresti non avere il barattolo appropriato nel percorso di classe.

.

Come potrebbe essere rimosso?

Mettendo il barattolo httpclient nel percorso della tua classe. Se è un webbapp, copia il barattolo in WEB-INF/lib se è autonomo, assicurati di avere questo vaso nel percorso di classe o impostato esplicitamente utilizzando l'opzione -cp

come DOC dice,

.

gettato se la macchina virtuale Java o un'istanza di ClassLoader tenta di caricare nella definizione di una classe (come parte di una normale chiamata di metodo o come parte della creazione di una nuova istanza utilizzando la nuova espressione) e nessuna definizione della classe potrebbe essere trovato.

Esisteva la definizione di classe ricercata quando è stata compilata la classe attualmente in esecuzione, ma la definizione non può più essere trovata.

Modifica:
Se stai usando una gestione della dipendenza come Maven / Gradle (consulta la risposta di seguito) o SBT, utilizzalo per portare il barattolo httpclient per te.

Altri suggerimenti

Se è un progetto di Maven, aggiungi la sotto dipendenza nel tuo file POM

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

Ho risolto questo problema per me stesso, ho trovato che ci sono due file di http-client con diversa versione di altri file JAR dipendenti.Quindi è possibile che la versione poteva crollare tra i file delle biblioteche, quindi rimuovi tutti i file delle librerie antiche / precedenti e riaggiunta sono file JAR dalla cartella Lib di questo file zip:

Donwload zip file da qui

Stavo affrontando lo stesso problema.Nel mio caso, ho avuto una dipendenza da httpclient con una versione precedente mentre SendGrid ha richiesto una versione più recente di httpclient.Assicurati che la versione di httpclient sia corretta nelle tue dipendenze e funzionerebbe bene.

Questo problema si verifica se ci sono diverse versioni del barattolo.In particolare le versioni di httpcore e httpclient.Usa le stesse versioni di httpcore e httpcllient.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top