java.lang.NoClassDefFoundError: org / apache / http / client / HttpClient - PullRequest
46 голосов
/ 12 марта 2012

Я пытаюсь сделать запрос на получение от сервлета GWT, чтобы получить ответ JSON от веб-службы.Ниже приведен код моего сервлета:

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

Получение следующего исключения при попытке сделать запрос на получение от сервлета 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)

Что может быть возможной причиной этого исключения?Как это можно удалить?

Я использую jdk1.6.0_30 в Ubuntu 10.04.

Ответы [ 5 ]

62 голосов
/ 03 июля 2014

Если это проект maven, добавьте приведенную ниже зависимость в ваш файл pom

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>
28 голосов
/ 12 марта 2012

Что может быть возможной причиной этого исключения?

Возможно, у вас нет подходящего Jar в вашем пути к классам.

Как его можно удалить?

Поместив HTTPClient jar в ваш путь к классу.Если это веб-приложение, скопируйте Jar в WEB-INF/lib, если оно автономно, убедитесь, что у вас есть этот jar в пути к классам или явно задано с помощью -cp option

, поскольку doc говорит:

Выдается, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения) и нетможно найти определение класса.

Определение класса для поиска существовало, когда был скомпилирован исполняемый в данный момент класс, но определение больше не найдено.

Редактировать:
Если вы используете управление зависимостями, такое как Maven / Gradle (см. Ответ ниже) или SBT, пожалуйста, используйте его, чтобы принести банку httpclient для вас.

2 голосов
/ 29 апреля 2016

Я столкнулся с той же проблемой.В моем случае у меня была зависимость httpclient от более старой версии, в то время как sendgrid требовалась более новая версия httpclient.Просто убедитесь, что версия httpclient верна в ваших зависимостях и будет работать нормально.

2 голосов
/ 13 января 2016

Я решил эту проблему для себя, обнаружил, что там было два файла http-клиента с другой версией других зависимых jar-файлов.Таким образом, между файлами библиотек может происходить сбой версии, поэтому удалите все старые / предыдущие файлы библиотек и повторно добавьте файлы jar из папки lib этого zip-файла:

Загрузите Zip-файл отсюда

1 голос
/ 19 сентября 2017

Эта проблема возникает, если существуют разные версии jar.Особенно версии httpcore и httpclient.Используйте те же версии httpcore и httpclient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...