Question

J'essaie de faire une requête get depuis le servlet GWT pour obtenir la 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 en essayant d'effectuer une requête get à partir 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 pourrait-il être supprimé ?

J'utilise jdk1.6.0_30 sur Ubuntu 10.04.

Était-ce utile?

La solution

Quelle pourrait être la cause possible de cette exception ?

Vous n’avez peut-être pas le Jar approprié dans votre chemin de classe.

Comment pourrait-il être supprimé ?

En mettant le pot HTTPClient dans votre chemin de classe.S'il s'agit d'une application Web, copiez Jar dans WEB-INF/lib s'il est autonome, assurez-vous d'avoir ce fichier jar dans le chemin de classe ou explicitement défini à l'aide de -cp option

comme le doc dit,

Levée 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 dans le cadre de la création d'une nouvelle instance à l'aide de la nouvelle expression) et qu'aucune définition de la classe n'a pu être trouvée.

La définition de classe recherchée existait lorsque la classe en cours d'exécution a été compilée, mais la définition est introuvable.

Modifier:
Si vous utilisez une gestion des dépendances comme Maven/Gradle (voir la réponse ci-dessous) ou SBT, veuillez l'utiliser pour apporter le pot httpclient pour vous.

Autres conseils

Si son 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>

J'ai résolu ce problème pour moi-même, j'ai trouvé qu'il y avait deux fichiers de client http avec une version différente des autres fichiers de jar à charge.Il y a donc une version peut s'effondrer entre des fichiers de bibliothèques afin de supprimer tous les fichiers de bibliothèques anciens / précédents et re-ajouter des fichiers JAR de Lib Dossier de ce fichier ZIP:

Donwoad Zip Fichier d'ici

Je faisais face au même problème.Dans mon cas, j'avais une dépendance de httpclient avec une version plus ancienne tandis que SendGrid avait besoin d'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.

Ce problème se produit s'il existe différentes versions de JAR.Surtout des versions de httpcore et httpclient.Utilisez les mêmes versions de httpcore et httpclient.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top