J'essaie de demander à la servlet GWT une requête get d'obtenir une réponse JSON d'un service Web . Voici le code de ma 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;
}
Obtention de l'exception suivante lors d'une tentative d'obtention d'une requête get auprès d'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)
Quelle pourrait être la cause possible de cette exception? Comment cela pourrait-il être supprimé?
J'utilise jdk1.6.0_30 sur Ubuntu 10.04.
Quelle pourrait être la cause possible de cette exception?
Vous ne pouvez pas avoir Jar approprié dans votre chemin de classe.
Comment cela pourrait-il être enlevé?
En mettant HTTPClient jar dans votre chemin de classe. S'il s'agit d'une application Web, copiez le fichier Jar dans WEB-INF/lib
s'il est autonome, assurez-vous que ce fichier est dans le chemin de la classe ou défini explicitement à l'aide de l'option -cp
.
comme dit le doc ,
Émis si la machine virtuelle Java ou une instance de ClassLoader tente de charger la définition d'une classe (dans le cadre d'un appel de méthode normal ou lors de la création d'une nouvelle instance à l'aide de la nouvelle expression) et si aucune définition de la classe n'a été trouvée.
La définition de classe recherchée existait lors de la compilation de la classe en cours d'exécution, mais la définition est introuvable.
Modifier:
Si vous utilisez une gestion des dépendances telle que Maven/Gradle (voir la réponse ci-dessous) ou SBT, veuillez l’utiliser pour apporter le fichier jar httpclient à votre place.
Si c'est un projet maven, ajoutez la dépendance ci-dessous dans votre fichier pom
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
Je faisais face au même problème. Dans mon cas, j'avais une dépendance de httpclient avec une version plus ancienne alors que sendgrid nécessitait une version plus récente de httpclient. Assurez-vous simplement que la version de httpclient est correcte dans vos dépendances et cela fonctionnerait bien.
J'ai résolu le problème moi-même. J'ai constaté qu'il y avait deux fichiers de client HTTP avec une version différente des autres fichiers jar dépendants. Donc, il est possible que les versions soient réduites entre les fichiers de la bibliothèque, aussi supprimez tous les fichiers de bibliothèque précédents/anciens et rajoutez des fichiers jar du dossier lib du fichier Zip
Ce problème se produit s'il existe différentes versions de jar. Surtout les versions de httpcore et httpclient. Utilisez les mêmes versions de httpcore et httpclient.