java.lang.NoclAssDeffounderRor:org / apache / http / client / httpclient
質問
GWTサーブレットからGETリクエストを作成してWebサービスからの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)
.
この例外の原因が起こり得るものは何ですか? それがどのように削除される可能性がありますか?
Ubuntu 10.04でJDK1.6.0_30を使用しています。
解決
この例外の原因が起こり得るものは何ですか?
クラスパスに適切な瓶がないかもしれません。
どのように取り外すか?
クラスパスにHttpClient Jarを入れることによって。 WebAppの場合は、jarを
WEB-INF/lib
にコピーする場合は、このJARがクラスパスにあるか、または-cp
オプションを使用して明示的に設定されていることを確認してください。 docJava仮想マシンまたはクラスローダインスタンスがクラスの定義(通常のメソッド呼び出しの一部として、または新しい式を使用して新しいインスタンスの作成の一部として)の定義をロードしようとし、クラスの定義を実行しようとした場合にスローされます。見つかる
現在実行中のクラスがコンパイルされたときに検索対象クラス定義が存在しましたが、定義は見つかりませんでした。
編集:
Maven / Gradleのような依存関係管理を使用している場合(下記の答えを参照)、SBTを使用してHttpClient Jarを持参してください。
他のヒント
Mavenプロジェクトの場合は、POMファイルの下記の依存関係を追加します。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.4</version>
</dependency>
. 私は自分のためにこの問題を解決しました、私は他の依存jarファイルの異なるhttp-clientの2つのファイルがあることがわかりました。そのため、ライブラリファイル間でバージョンが折りたたまれている可能性があるので、古い/前のライブラリファイルをすべて削除し、再追加はこのzipファイルのlibフォルダからのJARファイルです。
私は同じ問題に直面していました。私の場合は、SendGridが新しいバージョンのHttpClientを必要としている間、httpclientの依存関係を古いバージョンで依存していました。依存関係のhttpclientのバージョンが正しいことを確認してください。
この問題は、jarバージョンが異なる場合に発生します。特にhttpcoreとhttpclientのバージョン。同じバージョンのHttpCoreとHttpClientを使用してください。