java.lang.NoClassDefFoundError:org/apache/http/client/HttpClient
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.
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:
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.