Frage

Ich versuche, eine Get-Anfrage vom GWT-Servlet zu stellen, um eine JSON-Antwort von einem Webdienst zu erhalten.Es folgt der Code in meinem 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;
}

Beim Versuch, eine Get-Anfrage von einem GWT-Servlet zu stellen, wird die folgende Ausnahme angezeigt.

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)

Was könnte die mögliche Ursache für diese Ausnahme sein?Wie könnte es entfernt werden?

Ich verwende jdk1.6.0_30 unter Ubuntu 10.04.

War es hilfreich?

Lösung

Was könnte die mögliche Ursache für diese Ausnahme sein?

Möglicherweise ist in Ihrem Klassenpfad nicht das entsprechende Jar enthalten.

Wie könnte es entfernt werden?

Indem Sie HTTPClient jar in Ihren Klassenpfad einfügen.Wenn es sich um eine Webanwendung handelt, kopieren Sie Jar hinein WEB-INF/lib Wenn es eigenständig ist, stellen Sie sicher, dass sich diese JAR-Datei im Klassenpfad befindet oder explizit mit festgelegt wird -cp Möglichkeit

als die Dok sagt,

Wird ausgelöst, wenn die Java Virtual Machine oder eine ClassLoader-Instanz versucht, die Definition einer Klasse zu laden (als Teil eines normalen Methodenaufrufs oder als Teil der Erstellung einer neuen Instanz mit dem neuen Ausdruck) und keine Definition der Klasse gefunden werden konnte.

Die gesuchte Klassendefinition war vorhanden, als die aktuell ausgeführte Klasse kompiliert wurde, die Definition kann jedoch nicht mehr gefunden werden.

Bearbeiten:
Wenn Sie ein Abhängigkeitsmanagement wie Maven/Gradle (siehe Antwort unten) oder SBT verwenden, verwenden Sie es bitte, um das httpclient-JAR für Sie bereitzustellen.

Andere Tipps

Wenn es ein MAVEN-Projekt ist, fügen Sie die unten angegebene Abhängigkeit in Ihrer POM-Datei hinzu generasacodicetagpre.

Ich habe dieses Thema für mich gelöst, ich fand dort zwei Dateien von HTTP-Client mit einer anderen Version anderer abhängiger JAR-Dateien.Es kann also die Version zwischen Bibliothekendateien zusammenbrechen, sodass alle alten / vorherigen Bibliotheken-Dateien entfernen und neu hinzufügen, sind JAR-Dateien aus LIB-Ordner dieser ZIP-Datei:

DONWLOAD ZIP-Datei von hier

Ich hatte das gleiche Problem.In meinem Fall hatte ich eine Abhängigkeit von httpclient mit einer älteren Version, während SendGrid eine neuere Version von httpClient erforderte.Stellen Sie einfach sicher, dass die Version von HttpClient in Ihren Abhängigkeiten korrekt ist, und es funktioniert gut.

Dieses Problem tritt auf, wenn verschiedene JAR-Versionen vorhanden sind.Insbesondere Versionen von httpcore und httpclient.Verwenden Sie die gleichen Versionen von httpcore und httpclient.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top