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

Lesezeit: 7 Minuten

Ich versuche, eine Abrufanfrage vom GWT-Servlet zu stellen, um eine JSON-Antwort von einem Webdienst zu erhalten. Im Folgenden ist 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;
}

Erhalten der folgenden Ausnahme beim Versuch, eine Get-Anfrage von einem GWT-Servlet zu stellen.

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 auf Ubuntu 10.04.

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>

  • Und für Gradle: compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'

    – benscabbia

    26. Mai 2016 um 19:41 Uhr

  • Hallo, ich verwende Maven, aber ich kann die Lösung für dieses Problem nicht finden. Das ist meine Abhängigkeitsstruktur org.apache.httpcomponents httpclient 4.5.3 httpcore 4.4.1 Es ist mein vollständiger Stackoverflow-Post stackoverflow.com/questions/64047804/…

    – bpdin

    5. Dezember 2020 um 13:29 Uhr

Benutzer-Avatar
Nishant

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

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

Wie könnte es entfernt werden?

Indem Sie HTTPClient jar in Ihren Klassenpfad einfügen. Wenn es sich um eine Webapp handelt, kopieren Sie Jar in WEB-INF/lib Wenn es eigenständig ist, stellen Sie sicher, dass Sie dieses JAR im Klassenpfad haben oder explizit mit festlegen -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 existierte, als die aktuell ausgeführte Klasse kompiliert wurde, aber die Definition kann 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 mitzubringen.

  • danke dafür, aber jetzt bekomme ich diesen Fehler com.google.gwt.user.server.rpc.UnexpectedException

    – Saurabh Saxena

    12. März 2012 um 8:51 Uhr

  • Ich bin mir über die neue Ausnahme nicht sicher, ich wusste wenig darüber, was NoClassDefFound verursacht, und ich habe das mit Ihnen geteilt.

    – Nischant

    12. März 2012 um 8:54 Uhr

  • Prüfen google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/… Weitere Informationen zu UnexpectedException

    – Hardik Mischra

    12. März 2012 um 10:34 Uhr

  • Wie fügen Sie das JAR zum Klassenpfad hinzu? Ich habe kein JAR für HTTPClient, es wurde in IntelliJ importiert

    – Vikzilla

    10. Mai 2016 um 2:18 Uhr

  • Sie nutzen -cp -Parameter, um Jars zum Klassenpfad hinzuzufügen. Ich verwende IntelliJ nicht, aber versuche zu suchen, wie man in IntelliJ JAR zum Klassenpfad hinzufügt, ich bin mir sicher, dass es Artikel darüber geben muss.

    – Nischant

    10. Mai 2016 um 9:03 Uhr

Ich habe dieses Problem für mich selbst gelöst, ich habe festgestellt, dass es zwei Dateien des http-Clients mit unterschiedlichen Versionen anderer abhängiger JAR-Dateien gibt. Es kann also vorkommen, dass Versionen zwischen Bibliotheksdateien zusammengebrochen sind. Entfernen Sie daher alle alten/vorherigen Bibliotheksdateien und fügen Sie die JAR-Dateien aus dem lib-Ordner dieser ZIP-Datei erneut hinzu:

Laden Sie die Zip-Datei von hier herunter

  • Hat bei mir nicht funktioniert.. kein Vorteil des Herunterladens.

    – Madhab452

    20. April 2017 um 5:48 Uhr

  • Alhamdulillah, hat wie ein Zauber funktioniert! Danke für SO, @A.Aleem, ich fand endlich eines Tages Probleme, Alhamdulillah.

    – Noor Hossain

    5. Oktober 2021 um 10:24 Uhr

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

  • Lebensretter.. httpclient von 4.3.5 auf 4.5.3 geändert. funktionierte gut

    – Benutzer3014595

    13. Oktober 2017 um 7:19 Uhr

Ich habe dieses Problem gelöst, indem ich die folgende Abhängigkeit importiert habe. Sie müssen httpclient manuell importieren

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Benutzer-Avatar
Noor Hossain

Nach dem Erstellen von Artifact Jar stand ich vor diesem Problem. Was ich das mache, erschaffe ich neu Artifact > With Module Dependency > Und lassen Sie dann die Hauptklasse leer. Auf diese Weise lief das Glas nach dem Erstellen des Artefaktglases in Ordnung. Ich denke, das Problem war, http-client von org.apache und vom Netzwerk – diese beiden Arten von Klassen wurden gleichzeitig für verschiedene Bibliotheken in meinem ersten Artefakt verwendet und das Problem tritt auf. Als ich also ein neues Artefakt erstellte und unnötige Bibliotheken und doppelte Bibliotheken hinterließ, war das Problem verschwunden.

Benutzer-Avatar
Jeberdson Abraham

Ich hatte das gleiche Problem, später stellte ich fest, dass ich die falsche Gradle-Abhängigkeit verwendete.,

Falsch:

compileOnly 'org.apache.httpcomponents:httpclient:4.5.3'

Richtig:

implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'

Nachdem ich es geändert hatte, funktionierte es einwandfrei.

1101270cookie-checkjava.lang.NoClassDefFoundError: org/apache/http/client/HttpClient

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy