문제

웹 서비스에서 JSON 응답을 얻기 위해 GWT 서블릿에서 GET 요청을 수행하려고합니다. 다음은 내 서블릿의 코드입니다.

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을 사용하고 있습니다.

도움이 되었습니까?

해결책

이 예외의 가능한 원인은 무엇입니까?

클래스 경로에 적절한 JAR이 없을 수 있습니다.

어떻게 제거 될 수 있습니까?

HttpClient Jar를 클래스 경로에 넣음으로써

. WebApp이면 JAR이 독립 실행 형 인 경우 WEB-INF/lib에 복사하십시오. class 경로 에이 JAR이 있거나 -cp 옵션을 사용하여 명시 적으로 설정한지 확인하십시오.

Doc 가 말합니다.

Java 가상 컴퓨터 또는 클래스 로더 인스턴스가 클래스 정의 (일반 메소드 호출의 일부로 또는 새 표현식을 사용하여 새 인스턴스를 만드는 부분으로)로드하려고하면 클래스의 정의가 없으면 Throw됩니다. 발견된다.

현재 실행중인 클래스가 컴파일되었을 때 검색되는 클래스 정의가 존재했지만 정의가 더 이상 발견 될 수 없습니다.

편집 :

Maven / Gradle과 같은 종속성 관리 (아래 답변 참조) 또는 SBT와 같은 종속성 관리를 사용하는 경우 HttpClient Jar를 가져 오십시오.

다른 팁

MAVEN 프로젝트 인 경우 POM 파일에 아래의 종속성을 추가

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

나는이 문제를 해결했다. 다른 종속 jar 파일의 다른 버전의 HTTP 클라이언트의 두 개의 파일이 있다는 것을 알았습니다.따라서 버전이 라이브러리 파일간에 축소되었으므로 모든 이전 / 이전 / 이전 라이브러리 파일을 제거하고 다시 추가하면이 zip 파일의 lib 폴더에서 jar 파일입니다.

DonWload zip 파일 여기에서

나는 같은 문제에 직면 해 있었다.내 경우에는 이전 버전이있는 HttpClient의 종속성이 있었지만 SendGrid는 최신 버전의 HttpClient를 필요로했습니다.종속성에서 HTTPClient 버전이 올바른지 확인하고 잘 작동합니다.

이 문제는 다른 JAR 버전이있는 경우 발생합니다.특히 httpcore 및 httpclient의 버전.동일한 버전의 httpcore 및 httpclient를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top