GAE/GWT java应用中的OAuth2令牌无效

GAE/GWT java应用中的OAuth2令牌无效,java,google-app-engine,gwt,oauth-2.0,Java,Google App Engine,Gwt,Oauth 2.0,我正在开发一个GWT/GAE java应用程序 只需通过GWT地理定位实现获取用户位置(效果非常好) 点击按钮时,应将纬度、经度和精度写入谷歌电子表格 当我单击“保存到电子表格”按钮时,我在eclipse控制台中收到以下错误消息: 04.09.2012 16:44:01 com.google.appengine.repackaged.org.apache.http.impl.client.DefaultRequestDirector handleResponse WARNUNG: Authent

我正在开发一个GWT/GAE java应用程序

  • 只需通过GWT地理定位实现获取用户位置(效果非常好)
  • 点击按钮时,应将纬度、经度和精度写入谷歌电子表格
  • 当我单击“保存到电子表格”按钮时,我在eclipse控制台中收到以下错误消息:

    04.09.2012 16:44:01 com.google.appengine.repackaged.org.apache.http.impl.client.DefaultRequestDirector handleResponse
    WARNUNG: Authentication error: Unable to respond to any of these challenges: {authsub=WWW-Authenticate: AuthSub realm="https://www.google.com/accounts//AuthSubRequest"}
    com.google.gdata.client.GoogleService$SessionExpiredException: OK
    <HTML>
    <HEAD>
    <TITLE>Token invalid - Invalid token: Stateless token parent not found</TITLE>
    </HEAD>
    <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
    <H1>Token invalid - Invalid token: Stateless token parent not found</H1>
    <H2>Error 401</H2>
    </BODY>
    </HTML>
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:570)
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
    at com.google.gdata.client.Service.getFeed(Service.java:1135)
    at com.google.gdata.client.Service.getFeed(Service.java:998)
    at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:645)
    at com.google.gdata.client.Service.getFeed(Service.java:1017)
    at com.cloudpilots.locator.server.GSpreadsheetServiceImpl.insertRow(GSpreadsheetServiceImpl.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    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:125)
    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:94)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:370)
    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)
    
    有人知道问题出在哪里吗

    致以最良好的祝愿

    Juri Wiens

    这种方式有效:

    1) 对OAuth使用Google drive DrEdit示例

    注意:您需要添加刷新令牌,我发现添加并不难

    2) 这样连接:

        SpreadsheetService service = new SpreadsheetService("cellmaster-v0.2");
    
        // Authorize the service object for a specific user (see other sections)
        service.setHeader("Authorization", "Bearer " + accessToken);
    
    
        URL SPREADSHEET_FEED_URL = getSpreadsheetUrl(spreadsheetKey);
        spreadsheet = service.getEntry 
                (SPREADSHEET_FEED_URL, SpreadsheetEntry.class);
    
    我看了很多例子。我花了几天时间才找到这个解决方案。

    这种方法有效:

    1) 对OAuth使用Google drive DrEdit示例

    注意:您需要添加刷新令牌,我发现添加并不难

    2) 这样连接:

        SpreadsheetService service = new SpreadsheetService("cellmaster-v0.2");
    
        // Authorize the service object for a specific user (see other sections)
        service.setHeader("Authorization", "Bearer " + accessToken);
    
    
        URL SPREADSHEET_FEED_URL = getSpreadsheetUrl(spreadsheetKey);
        spreadsheet = service.getEntry 
                (SPREADSHEET_FEED_URL, SpreadsheetEntry.class);
    

    我看了很多例子。我花了几天的时间才找到这个解决方案。

    链接断了,你能帮我吗?希望它有用,现在很旧,可能要找最近的东西。链接断了,你能帮我吗?希望它有用,现在很旧,可能要找最近的东西。
        SpreadsheetService service = new SpreadsheetService("cellmaster-v0.2");
    
        // Authorize the service object for a specific user (see other sections)
        service.setHeader("Authorization", "Bearer " + accessToken);
    
    
        URL SPREADSHEET_FEED_URL = getSpreadsheetUrl(spreadsheetKey);
        spreadsheet = service.getEntry 
                (SPREADSHEET_FEED_URL, SpreadsheetEntry.class);