سؤال

أحاول تقديم طلب الحصول على GWT servlet للحصول على استجابة JSON من خدمة الويب.فيما يلي الكود الموجود في 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;
}

الحصول على الاستثناء التالي عند محاولة تقديم طلب الحصول على 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)

ماذا يمكن أن يكون السبب المحتمل لهذا الاستثناء؟كيف يمكن إزالتها؟

أنا أستخدم jdk1.6.0_30 على أوبونتو 10.04.

هل كانت مفيدة؟

المحلول

ماذا يمكن أن يكون السبب المحتمل لهذا الاستثناء؟

قد لا يكون لديك Jar المناسب في مسار صفك.

كيف يمكن إزالتها؟

عن طريق وضع جرة HTTPClient في مسار الفصل الدراسي الخاص بك.إذا كان تطبيق ويب، فانسخ Jar إلى WEB-INF/lib إذا كان مستقلاً، فتأكد من وجود هذا الجرة في مسار الفصل أو تم تعيينه بشكل صريح باستخدام -cp خيار

كما وثيقة يقول،

يتم طرحه إذا حاول Java Virtual Machine أو مثيل ClassLoader التحميل في تعريف فئة (كجزء من استدعاء أسلوب عادي أو كجزء من إنشاء مثيل جديد باستخدام التعبير الجديد) ولا يمكن العثور على تعريف للفئة.

كان تعريف الفئة التي تم البحث عنها موجودًا عندما تم تجميع الفئة التي يتم تنفيذها حاليًا، ولكن لم يعد من الممكن العثور على التعريف.

يحرر:
إذا كنت تستخدم إدارة تبعية مثل Maven/Gradle (راجع الإجابة أدناه) أو SBT، فيرجى استخدامها لإحضار جرة httpclient لك.

نصائح أخرى

إذا كان مشروع Maven، أضف ما أقل من التبعية في ملف POM الخاص بك giveacodicetagpre.

قمت بحل هذه المشكلة لنفسي، وجدت أنه كان هناك ملفين لملك HTTP مع إصدار مختلف من ملفات جرة أخرى تعتمد.لذلك قد يكون هناك إصدار قد ينهار بين ملفات المكتبات حتى إزالة جميع ملفات المكتبات القديمة / السابقة وإعادة إضافة ملفات جرة من مجلد LIB من ملف ZIP هذا:

donwload ملف zip من هنا

كنت تواجه نفس المشكلة.في حالتي، كان لدي تبعية ل httpclient مع إصدار أقدم أثناء طلب SendGrid إصدار أحدث من HTTPClient.فقط تأكد من أن إصدار HTTPClient صحيح في تبعياتك وسيعمل بشكل جيد.

تحدث هذه المشكلة إذا كانت هناك إصدارات جرة مختلفة.خاصة إصدارات httpcore و httpclient.استخدام نفس إصدارات httpcore و httpclient.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top