2010-05-16 78 views
1

我在使用Google Web Toolkit在服務器端(servlet)調用Google日曆 API時遇到問題。我下載了java庫,並添加爲外部JAR eclipse以下文件:gdata-core,gdata-calendar,gdata- calendar-meta,gdata-client-meta,gdata-client。 然後,我創建了一個方法,因爲它遵循:在服務器端調用Google Calendar API的問題

import com.google.gdata.client.calendar.CalendarService; 
import com.google.gdata.data.calendar.CalendarEntry; 
import com.google.gdata.data.calendar.CalendarFeed; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 



public class GCalServImpl extends RemoteServiceServlet implements 
GCalServ { 

    @Override 
    public String RetrieveCalendars() { 
     // TODO Auto-generated method stub 
     // Create a CalenderService and authenticate 
     try{ 
     CalendarService myService = new CalendarService("taskR"); 
     myService.setUserCredentials(***username***, "***password***"); 

     // Send the request and print the response 
     URL feedUrl = new URL("http://www.google.com/calendar/feeds/default/ 
allcalendars/full"); 
     CalendarFeed resultFeed = myService.getFeed(feedUrl, 
CalendarFeed.class); 
     System.out.println("Your calendars:"); 
     System.out.println(); 
     String s = ""; 
     for (int i = 0; i < resultFeed.getEntries().size(); i++) { 
      CalendarEntry entry = resultFeed.getEntries().get(i); 
      s=entry.getTitle().getPlainText(); 
      System.out.println("\t" + s); 
      return s; 
     } 
     }catch(Exception e){ 
      e.printStackTrace(); 

     } 
     return null; 
    } 

我然後從客戶端把它做一個基本的異步調用。如果 我嘗試推出我得到了以下錯誤程序:

WARNING: Error for /taskr/cal 
java.lang.NoClassDefFoundError: com/google/gdata/client/calendar/ 
CalendarService 
    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.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java: 
51) 
    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 
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.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java: 
70) 
    at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 
152) 
    at com.google.appengine.tools.development.JettyContainerService 
$ApiProxyHandler.handle(JettyContainerService.java:349) 
    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: 
com.google.gdata.client.calendar.CalendarService 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:315) 
    at 
com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java: 
151) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:250) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398) 
    ... 33 more 

我能做些什麼?

編輯:我使用谷歌網絡工具包和它的標準RPC模式。

回答

2

您已經在Eclipse中添加了jar文件,但它看起來像您還沒有配置Jetty來找到它們 - 這就是爲什麼你得到一個NoClassDefFoundError

+0

不應該自動與GWT和Eclipse與GWT插件?如果沒有,你能告訴我我必須改變什麼嗎? – Raffo 2010-05-16 09:24:45

+0

將此jar添加到文件夾war/WEB-INF中,修復了以下問題:gdata-client,gdata-client-meta,gdata-core,gdata-calendar,gdata-calendar-meta,google-collect,jsr-305。它們可以在gdata庫包中找到。 – Raffo 2010-05-16 11:23:47