Pergunta

Eu estou tentando fazer uma solicitação get do GWT servlet para obter resposta JSON a partir de um serviço web.A seguir está o código no meu 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;
}

Obtendo a seguinte exceção em tentar fazer pedido get a partir de um 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)

O que poderia ser a causa desse exceção?Como ele pode ser removido?

Eu estou usando jdk1.6.0_30 no ubuntu 10.04.

Foi útil?

Solução

O que poderia ser a causa desse exceção?

Você pode não ter se apropriado Jar em seu caminho de classe.

Como ele pode ser removido?

Colocando HTTPClient jar em seu caminho de classe.Se é uma webapp, copiar o Jar em WEB-INF/lib se é autônomo, certifique-se de que você tem esta jarra no caminho de classe ou explicitamente definida usando -cp opção

como o doc diz,

Lançada se a Máquina Virtual Java ou um carregador de classe instância tenta carregar na definição de uma classe (como parte de um método normal de chamada ou como parte da criação de uma nova instância usando a nova expressão) e não há uma definição de classe poderia ser encontrado.

O procurado para definição de classe existia quando em execução no momento da classe foi compilado, mas a definição não pode ser encontrada.

Editar:
Se você estiver usando uma dependência de gerenciamento como o Maven/Gradle (veja a resposta abaixo) ou SBT por favor, usá-lo para trazer o httpclient jar para você.

Outras dicas

Se o seu projeto maven, adicione o abaixo dependência no seu pom arquivo

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

Eu resolvi esse problema para mim, eu encontrei lá era de dois arquivos de http-client com versão diferente de outros dependentes de arquivos jar.Então não pode versão, foram colapso entre bibliotecas de arquivos para remover todos os velhos anterior/bibliotecas de arquivos e re-adicionar arquivos jar da pasta lib do arquivo zip:

Donwload do arquivo Zip a partir daqui

Eu estava enfrentando o mesmo problema.No meu caso, eu tinha uma dependência de httpclient com uma versão mais antiga, enquanto sendgrid necessária uma versão mais recente do httpclient.Apenas certifique-se de que a versão do httpclient está correto em suas dependências e que iria funcionar bem.

Este problema ocorre se existirem diferentes jar versões.Especialmente versões de httpcore e httpclient.Usar as mesmas versões de httpcore e httpclient.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top