![](/img/trans.png)
[英]Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
[英]java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
我正在嘗試從 GWT servlet 發出獲取請求,以從 web 服務獲取 JSON 響應。 以下是我的 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;
}
嘗試從 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)
此異常的可能原因是什么? 怎么可能去掉?
我在 ubuntu 10.04 上使用 jdk1.6.0_30。
如果是 maven 項目,請在 pom 文件中添加以下依賴項
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
此異常的可能原因是什么?
您的類路徑中可能沒有合適的 Jar。
怎么可能去掉?
通過將 HTTPClient jar 放在您的類路徑中。 如果它是一個 web 應用程序,如果它是獨立的,請將 Jar 復制到WEB-INF/lib
,確保您在類路徑中有這個 jar 或使用-cp
選項顯式設置
正如醫生所說,
如果 Java 虛擬機或 ClassLoader 實例嘗試加載類的定義(作為正常方法調用的一部分或作為使用 new 表達式創建新實例的一部分)並且找不到類的定義,則拋出。
編譯當前正在執行的類時,搜索到的類定義存在,但無法再找到該定義。
編輯:
如果您使用的是 Maven/Gradle(見下面的答案)或 SBT 等依賴項管理,請使用它為您帶來 httpclient jar。
我自己解決了這個問題,我發現有兩個 http-client 文件具有不同版本的其他依賴 jar 文件。 因此,庫文件之間可能存在版本崩潰,因此刪除所有舊的/以前的庫文件並重新添加來自此 zip 文件的 lib 文件夾中的 jar 文件:
我面臨着同樣的問題。 就我而言,我依賴舊版本的 httpclient,而 sendgrid 需要更新版本的 httpclient。 只需確保您的依賴項中的 httpclient 版本正確,它就可以正常工作。
如果存在不同的 jar 版本,則會出現此問題。 特別是 httpcore 和 httpclient 的版本。 使用相同版本的 httpcore 和 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>
創建工件 Jar 后,我遇到了這個問題。 我這樣做,我創建了一個新的Artifact > With Module Dependency >
然后將主 Class 留空。 這樣,在創建工件 jar 后,jar 運行正常。 我認為問題在於,來自 org.apache 和網絡的 http-client - 這兩種類型的 class 在我的第一個工件中同時用於不同的庫,問題就出現了。 所以,當我創建新的 Artifact 並留下不必要的庫和重復庫時,問題就消失了。
我遇到了同樣的問題,后來我發現我使用了錯誤的 gradle 依賴項。,
錯誤的:
compileOnly 'org.apache.httpcomponents:httpclient:4.5.3'
正確的:
implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
一旦我改變它,它工作正常。
java.lang.NoClassDefFoundError on HttpAsyncClients.custom
java.lang.NoClassDefFoundError: org/apache/http/impl/nio/clien /CloseableHttpAsyncClient
java.lang.NoClassDefFoundError: org/apache/http/HttpHost
您必須導入httpclient
庫。
Go 到 maven 網站並下載httpclient jar 文件。 https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
現在您必須將此 jar 文件復制到 \lib 文件夾中。
之后查找 POM 文件並添加依賴項。 您可以在 maven 網站上查看依賴項代碼。 只是 go 到結束代碼行,添加以下依賴項。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
對於 Jira/Confluence,POM 文件的位置就是這樣。 ( C:\Program Files\Atlassian\JIRA\atlassian-jira\META-INF\maven\com.atlassian.jira
)
此位置有兩個文件夾:atlassian-jira-webapp 和 jira-webapp-dist。 這兩個文件夾都包含 POM 文件。
只需在 notepad++ 中打開一個 POM 文件並搜索 end of。
現在 go 到第二個文件夾 POM 文件並添加相同的依賴項。 只需查看錯誤並添加依賴項。
之后重新啟動您的服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.