Pregunta

Estoy intentando realizar una solicitud de obtención desde el servlet GWT para obtener una respuesta JSON de un servicio web.El siguiente es el código en mi 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;
}

Obteniendo la siguiente excepción al intentar realizar una solicitud de obtención 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 se podría eliminar?

Estoy usando jdk1.6.0_30 en ubuntu 10.04.

¿Fue útil?

Solución

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

Es posible que no tengas Jar apropiado en tu ruta de clases.

¿Cómo se podría eliminar?

Poniendo el jar HTTPClient en su ruta de clase.Si es una aplicación web, copie Jar en WEB-INF/lib si es independiente, asegúrese de tener este jar en la ruta de clase o configurarlo explícitamente usando -cp opción

como el doc dice,

Se lanza si la máquina virtual Java o una instancia de ClassLoader intenta cargar la definición de una clase (como parte de una llamada a un método normal o como parte de la creación de una nueva instancia usando la nueva expresión) y no se puede encontrar ninguna definición de la clase.

La definición de clase buscada existía cuando se compiló la clase que se está ejecutando actualmente, pero ya no se puede encontrar la definición.

Editar:
Si está utilizando una gestión de dependencias como Maven/Gradle (consulte la respuesta a continuación) o SBT, utilícela para traerle el jar httpclient.

Otros consejos

Si es un proyecto MAVEN, agregue la dependencia a continuación en su archivo POM

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

Resolví este problema para mí, encontré que hay dos archivos de HTTP-Client con diferentes versiones de otros archivos de jar dependientes.Por lo tanto, que puede que la versión se haya colapsando entre los archivos de las bibliotecas, así que elimine todos los archivos de bibliotecas viejos / anteriores y vuelva a agregar son archivos JAR de la carpeta LIB de este archivo zip:

Donwoad Zip archivo desde aquí

Me enfrenté el mismo problema.En mi caso, tuve una dependencia de httpclient con una versión anterior, mientras que SendGrid requirió una versión más nueva de HTTPClient.Solo asegúrese de que la versión de HTTPCLIENT sea correcta en sus dependencias y funcionaría bien.

Este problema ocurre si hay versiones de jarra diferentes.Especialmente versiones de httpcore y httpclient.Utilice las mismas versiones de httpcore y httpclient.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top