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。

原文由 Saurabh Saxena 发布,翻译遵循 CC BY-SA 4.0 许可协议


回答:

此异常的可能原因是什么?

您的课程路径中可能没有合适的 Jar。

怎么可能去掉?

通过将 HTTPClient jar 放在您的类路径中。如果它是一个 web 应用程序,请将 Jar 复制到 WEB-INF/lib 如果它是独立的,请确保您在类路径中有这个 jar 或使用 -cp 选项显式设置

正如 医生 所说,

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且找不到类的定义,则抛出此异常。

搜索到的类定义在编译当前执行的类时已经存在,但无法再找到该定义。

编辑:

如果您使用的是 Maven/Gradle(请参阅下面的答案)或 SBT 之类的依赖管理,请使用它为您带来 httpclient jar。

原文由 Nishant 发布,翻译遵循 CC BY-SA 4.0 许可协议

以上是 java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient 的全部内容, 来源链接: utcz.com/p/944719.html

回到顶部