2012-03-12 15 views
31

Estoy tratando de hacer una solicitud get del servlet GWT para obtener la respuesta JSON de un servicio web. A continuación se presenta el código en mi servlet: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; 
} 

Conseguir la siguiente excepción en tratar de hacer una petición GET desde un servlet 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) 

¿Cuál podría ser la posible causa de esta excepción? ¿Cómo podría eliminarse?

Estoy usando jdk1.6.0_30 en ubuntu 10.04.

Respuesta

23

What could be the possible cause of this exception?

Es posible que no tenga Jar adecuado en su ruta de clase.

How it could be removed?

Al poner el jar HTTPClient en la ruta de su clase. Si se trata de una aplicación web, copiar JAR en WEB-INF/lib si es independiente, asegúrese de que tiene este frasco en la ruta de clase o explicitamente -cp opción

como el doc dice,

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

gracias por esto, pero ahora recibo este error com.google.gwt.user.server.rpc.UnexpectedException –

+0

No estoy seguro acerca de la nueva excepción, sabía muy poco acerca de las causas de NoClassDefFound, y lo compartí con tú. – Nishant

+0

Gracias por su respuesta –

42

Si es un proyecto Maven, añadir la dependencia a continuación en el archivo de pom

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

Y para Gradle: 'compile group: 'org.apache.httpcomponents', nombre: 'httpclient', versión: '4.5.2'' – gudthing

1

he resuelto este problema por mí mismo, me pareció que está era dos archivos de http-cliente con diferentes versiones de otros archivos jAR dependientes. Así que es posible que la versión colapsaban entre bibliotecas de archivos para eliminar todas las bibliotecas de archivos y volver a agregar edad/anterior son archivos jar de carpeta de la liberación de este archivo zip:

Donwload Zip file from here

+0

No funcionó para mí .. no hay ningún beneficio de descarga. – Madhab452

2

que estaba frente a la misma cuestión. En mi caso, tenía una dependencia de httpclient con una versión anterior, mientras que sendgrid requería una versión más nueva de httpclient. Solo asegúrate de que la versión de httpclient sea la correcta en tus dependencias y funcionaría bien.

+1

salvavidas .. ha cambiado httpclient de 4.3.5 a 4.5.3. funcionó bien – user3014595

1

Este problema se produce si hay diferentes versiones tarro. Especialmente versiones de httpcore y httpclient. Use las mismas versiones de httpcore y httpclient.

Cuestiones relacionadas