2012-03-12 16 views
31

Bir web hizmetinden JSON yanıtı almak için GWT sunucu uygulamasından istekte bulunmaya çalışıyorum.java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient

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 gelen olsun isteğini yapmaya çalışan üzerinde şu istisna alınıyor: ardından benim servlet'dir kodudur.

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) 

Bu istisnanın olası nedeni ne olabilir? Nasıl kaldırılabilir?

ubuntu 10.04 üzerinde jdk1.6.0_30 kullanıyorum.

cevap

23

What could be the possible cause of this exception?

Sen sınıf yolunda uygun Jar olmayabilir.

How it could be removed?

Sınıf yolunuza HTTPClient jar yerleştirerek. Bir Webapp ise, bu bağımsız olmadığını, sınıf yolunda bu kavanozunu veya açıkça -cp seçeneği

doc olarak

diyor kullanılarak ayarlanır emin olun WEB-INF/lib içine Jar kopya

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.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

+0

bunun için teşekkürler, ama şimdi bu hatayı alıyorum com.google.gwt.user.server.rpc.UnexpectedException –

+0

Yeni İstisna hakkında emin değilim, NoClassDefFound'un nedenleri hakkında çok az şey biliyordum ve bununla paylaştım. sen. UnexpectedException – Nishant

+0

teşekkürler bu doktora –

42

Eğer onun bir maven projesi pom dosyasında kendim bu sorunu çözmüş

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

Ve Gradle: 'derleme grubu: 'org.apache.httpcomponents', ad: 'httpclient', sürüm: '4.5.2' – gudthing

1

aşağıda bağımlılık eklemek, başka bağımlı kavanoz dosyalarının farklı versiyonu ile http-istemci iki dosya vardı oluyor bulundu. Yani versiyon nedenle bu zip dosyasının lib klasöründeki olan jar dosyalarını kütüphaneler dosya ve yeniden eklenti tüm eski/önceki kaldırmak dosyaları kütüphaneleri arasında orada çöken edildi olabilir:

Donwload Zip file from here

+0

Benim için işe yaramadı .. indirmenin herhangi bir yararı yok. – Madhab452

2

Ben aynı sorunu karşı karşıya idi. Benim durumumda, daha eski bir sürümle httpclient bağımlılığım olurken, sendGrid daha yeni bir httpclient sürümü gerektiriyordu. Sadece httpclient sürümünün bağımlılıklarınızda doğru olduğundan emin olun ve iyi çalışır.

+1

hayat kurtarıcı .., 4.3.5'ten 4.5.3'e kadar httpclient olarak değiştirildi. iyi çalıştı – user3014595

1

Farklı jar sürümleri varsa, bu sorun oluşur. Özellikle httpcore ve httpclient sürümleri. Httpcore ve httpclient'in aynı sürümlerini kullanın.

İlgili konular