简体   繁体   English

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

[英]java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient

I am trying to make a get request from the GWT servlet to get JSON response from a web service.我正在尝试从 GWT servlet 发出获取请求,以从 web 服务获取 JSON 响应。 Following is the code in my servlet:以下是我的 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;
}

Getting the following exception on trying to make get request from a GWT servlet.尝试从 GWT servlet 发出获取请求时出现以下异常。

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)

What could be the possible cause of this exception?此异常的可能原因是什么? How it could be removed?怎么可能去掉?

I am using jdk1.6.0_30 on ubuntu 10.04.我在 ubuntu 10.04 上使用 jdk1.6.0_30。

If its a maven project, add the below dependency in your pom file如果是 maven 项目,请在 pom 文件中添加以下依赖项

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>

What could be the possible cause of this exception?此异常的可能原因是什么?

You may not have appropriate Jar in your class path.您的类路径中可能没有合适的 Jar。

How it could be removed?怎么可能去掉?

By putting HTTPClient jar in your class path.通过将 HTTPClient jar 放在您的类路径中。 If it's a webapp, copy Jar into WEB-INF/lib if it's standalone, make sure you have this jar in class path or explicitly set using -cp option如果它是一个 web 应用程序,如果它是独立的,请将 Jar 复制到WEB-INF/lib ,确保您在类路径中有这个 jar 或使用-cp选项显式设置

as the doc says,正如医生所说,

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出。

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.编译当前正在执行的类时,搜索到的类定义存在,但无法再找到该定义。

Edit:编辑:
If you are using a dependency management like Maven/Gradle (see the answer below) or SBT please use it to bring the httpclient jar for you.如果您使用的是 Maven/Gradle(见下面的答案)或 SBT 等依赖项管理,请使用它为您带来 httpclient jar。

I solved this issue for myself, I found there's was two files of http-client with different version of other dependent jar files.我自己解决了这个问题,我发现有两个 http-client 文件具有不同版本的其他依赖 jar 文件。 So there may version were collapsing between libraries files so remove all old/previous libraries files and re-add are jar files from lib folder of this zip file:因此,库文件之间可能存在版本崩溃,因此删除所有旧的/以前的库文件并重新添加来自此 zip 文件的 lib 文件夹中的 jar 文件:

Donwload Zip file from here 从这里下载 Zip 文件

I was facing the same issue.我面临着同样的问题。 In my case, I had a dependency of httpclient with an older version while sendgrid required a newer version of httpclient.就我而言,我依赖旧版本的 httpclient,而 sendgrid 需要更新版本的 httpclient。 Just make sure that the version of httpclient is correct in your dependencies and it would work fine.只需确保您的依赖项中的 httpclient 版本正确,它就可以正常工作。

This problem occurs if there are different jar versions.如果存在不同的 jar 版本,则会出现此问题。 Especially versions of httpcore and httpclient.特别是 httpcore 和 httpclient 的版本。 Use same versions of httpcore and httpclient.使用相同版本的 httpcore 和 httpclient。

I have solved this problem by importing the following dependency.我通过导入以下依赖项解决了这个问题。 you must manually import httpclient您必须手动导入 httpclient

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

After Creating Artifact Jar I was facing this Problem.创建工件 Jar 后,我遇到了这个问题。 What I do that, I create a new Artifact > With Module Dependency > And then Leave Blank the Main Class.我这样做,我创建了一个新的Artifact > With Module Dependency >然后将主 Class 留空。 In that way, after creating the artifact jar, the jar was running Ok.这样,在创建工件 jar 后,jar 运行正常。 I, think the problem was, http-client from org.apache and from network - this two types of class used for different libraries at the same Time in my first Artifact and the problem arises.我认为问题在于,来自 org.apache 和网络的 http-client - 这两种类型的 class 在我的第一个工件中同时用于不同的库,问题就出现了。 So, When I created new Artifact, and leaving unnecessary libraries and duplicate libraries, the problem gone.所以,当我创建新的 Artifact 并留下不必要的库和重复库时,问题就消失了。

I faced the same issue, later I found I was using wrong gradle dependency.,我遇到了同样的问题,后来我发现我使用了错误的 gradle 依赖项。,

Wrong:错误的:

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

Correct:正确的:

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

Once I changed it, it was working fine.一旦我改变它,它工作正常。

java.lang.NoClassDefFoundError on HttpAsyncClients.custom
java.lang.NoClassDefFoundError: org/apache/http/impl/nio/clien /CloseableHttpAsyncClient
java.lang.NoClassDefFoundError: org/apache/http/HttpHost 

You have to import httpclient library.您必须导入httpclient库。

Go to maven website and download httpclient jar file. Go 到 maven 网站并下载httpclient jar 文件。 https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient

Now you have to copy this jar file into the \lib folder.现在您必须将此 jar 文件复制到 \lib 文件夹中。

After that look for POM file and add dependencies.之后查找 POM 文件并添加依赖项。 You can see dependencies code on maven website.您可以在 maven 网站上查看依赖项代码。 Just go to end of只是 go 到结束line of code, add the following dependencies.代码行,添加以下依赖项。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

In case of Jira/Confluence, POM file location are that.对于 Jira/Confluence,POM 文件的位置就是这样。 ( C:\Program Files\Atlassian\JIRA\atlassian-jira\META-INF\maven\com.atlassian.jira ) C:\Program Files\Atlassian\JIRA\atlassian-jira\META-INF\maven\com.atlassian.jira

There is two folder at this location: atlassian-jira-webapp and jira-webapp-dist.此位置有两个文件夹:atlassian-jira-webapp 和 jira-webapp-dist。 Both folders contain POM files.这两个文件夹都包含 POM 文件。

Just open one POM file in notepad++ and search for end of.只需在 notepad++ 中打开一个 POM 文件并搜索 end of。 在此处输入图像描述

Now go to second folder POM file and add same dependencies too.现在 go 到第二个文件夹 POM 文件并添加相同的依赖项。 Just look into error and add dependencies.只需查看错误并添加依赖项。

Restart your service after that.之后重新启动您的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 处理程序调度失败; 嵌套的异常是java.lang.NoClassDefFoundError:org / apache / http / client / HttpClient - Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient 线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient - Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient SpringBoot 3 与 Spring Cloud Vault 3.1.1 运行时错误 java.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient - SpringBoot 3 with Spring Cloud Vault 3.1.1 Runtime Error java.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient java.lang.NoClassDefFoundError: org/apache/commons/httpclient/Credentials 错误 - java.lang.NoClassDefFoundError: org/apache/commons/httpclient/Credentials error java.lang.NoClassDefFoundError:org.apache.http.client.CredentialsProvider错误与HTMLUnit - java.lang.NoClassDefFoundError: org.apache.http.client.CredentialsProvider error with HTMLUnit 错误 java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest - Error java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest 更改导致java.lang.NoClassDefFoundError的工作空间:org.apache.http.client.methods.HttpUriRequest - Change workspace causing java.lang.NoClassDefFoundError: org.apache.http.client.methods.HttpUriRequest java.lang.NoClassDefFoundError:使用jsonparser()时org / apache / http / client / ClientProtocolException - java.lang.NoClassDefFoundError: org/apache/http/client/ClientProtocolException while using the jsonparser() java.lang.NoClassDefFoundError:org / apache / http / nio / conn / NHttpClientConnectionManager - java.lang.NoClassDefFoundError: org/apache/http/nio/conn/NHttpClientConnectionManager java.lang.NoClassDefFoundError:org.apache.http.Consts - java.lang.NoClassDefFoundError: org.apache.http.Consts
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM