webentwicklung-frage-antwort-db.com.de

java.lang.NoClassDefFoundError: org/Apache/http/client/HttpClient

Ich versuche, eine Abrufanforderung vom GWT-Servlet anzufordern, um JSON-Antwort von einem Webservice abzurufen.

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;
}

Abrufen der folgenden Ausnahme beim Versuch, eine Anforderung von einem GWT-Servlet abzurufen.

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 konnte sie entfernt werden?

Ich verwende jdk1.6.0_30 auf Ubuntu 10.04.

43
Saurabh Saxena

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

Sie haben möglicherweise kein passendes Jar in Ihrem Klassenpfad.

Wie könnte es entfernt werden?

Durch das Einfügen von HTTPClient jar in Ihren Klassenpfad. Wenn es sich um eine Webanwendung handelt, kopieren Sie Jar in WEB-INF/lib, wenn es eigenständig ist. Stellen Sie sicher, dass sich diese Jar im Klassenpfad befindet oder explizit mit der -cp-Option festgelegt wird

wie der doc sagt,

Wird ausgelöst, wenn die Java Virtual Machine oder eine ClassLoader-Instanz versucht, in die Definition einer Klasse zu laden (als Teil eines normalen Methodenaufrufs oder beim Erstellen einer neuen Instanz mithilfe des neuen Ausdrucks) 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, um den httpclient jar für Sie mitzubringen.

26
Nishant

Wenn es sich um ein Maven-Projekt handelt, fügen Sie die folgende Abhängigkeit in Ihre POM-Datei ein

    <dependency>
        <groupId>org.Apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>
58
Balaji Katika

Ich stand vor demselben Problem. In meinem Fall hatte ich eine Abhängigkeit von httpclient mit einer älteren Version, während sendgrid eine neuere Version von httpclient benötigte. Stellen Sie einfach sicher, dass die Version von httpclient in Ihren Abhängigkeiten korrekt ist, und es funktioniert einwandfrei.

2
sahil mohindroo

Ich habe dieses Problem für mich gelöst und fand heraus, dass es zwei Dateien eines http-Clients mit unterschiedlichen Versionen anderer abhängiger JAR-Dateien gab. Die Version der Bibliotheken konnte kollabieren. Entfernen Sie also alle alten/vorherigen Bibliotheksdateien und fügen Sie sie erneut aus dem lib-Ordner dieser ZIP-Datei hinzu:

Zip-Datei von hier herunterladen

2
A.Aleem11

Dieses Problem tritt auf, wenn verschiedene Jar-Versionen vorhanden sind. Insbesondere Versionen von httpcore und httpclient. Verwenden Sie dieselben Versionen von httpcore und httpclient. 

1
Roshan