2012-01-22 8 views
0

のリストを取得しようと、単一使用トークンを与えられた私は、このガイドを次のようだ: http://code.google.com/intl/it-IT/apis/documents/docs/2.0/developers_guide_java.htmlGWT&GDATA:文書

私はちょうどトークンを取得した文書のリストを取得し、それを使用する必要があり、私は、単一の使用トークンを取得するためのAuthSubを使用し、これは動作するようです:私はこの

1/BM14a4NnfKf........ 

のような文字列は、今、私はこれをやろうとしている取得:http://code.google.com/intl/it-IT/apis/documents/docs/2.0/developers_guide_java.html#Versioning

1)バージョン

を指定します

2)私はTokenServiceImplというクラスで、これらの機能を管理していた文書

のリストを取得:

package mui.server.services; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 

import mui.client.services.TokenService; 

import com.google.appengine.api.users.User; 
import com.google.appengine.api.users.UserService; 
import com.google.appengine.api.users.UserServiceFactory; 
import com.google.gdata.client.docs.DocsService; 
import com.google.gdata.client.http.AuthSubUtil; 
import com.google.gdata.data.docs.DocumentListEntry; 
import com.google.gdata.data.docs.DocumentListFeed; 
import com.google.gdata.util.AuthenticationException; 
import com.google.gdata.util.ServiceException; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

public class TokenServiceImpl extends RemoteServiceServlet implements 
     TokenService { 

    private static final long serialVersionUID = 1L; 

    String nextUrl = ""; 
    String scope = "https://docs.google.com/feeds/"; 
    boolean secure = false; // set secure=true to request secure AuthSub tokens 
    boolean session = true; 
    String authSubUrl = ""; 

    @Override 
    public String getToken(String requestUri) { 
     nextUrl = requestUri; 
     authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session); 

     return ", clicca <a href='" + authSubUrl 
       + "'>qui</a> per regalarmi un token! (esempio Google Docs)"; 

    } 

    @Override 
    public String getDocsInfo(String token) { 
     String elenco=", grazie del token, eccolo qui:<br> " + token + "<br>"; 

     DocsService client = new DocsService("yourCo-yourAppName-v1"); 
     client.setProtocolVersion(DocsService.Versions.V2); 


     try { 
      URL feedUri = new URL(
        "https://docs.google.com/feeds/documents/private/full/"); 
      DocumentListFeed feed = client.getFeed(feedUri, DocumentListFeed.class); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ServiceException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return elenco; 
    } 


} 

しかし、方法、文字列「トークン」を取得getDocsInfo(、以前にトークン内を検索された)のみの行

DocumentListFeed feed = client.getFeed(feedUri, DocumentListFeed.class); 

は私にエラーを与える:

22-gen-2012 11.14.19 com.google.appengine.repackaged.org.apache.http.impl.client.DefaultRequestDirector handleResponse 
AVVERTENZA: Authentication error: Unable to respond to any of these challenges: {googlelogin=WWW-Authenticate: GoogleLogin realm="http://www.google.com/accounts"} 
com.google.gdata.util.AuthenticationException: OK 
<HTML> 
<HEAD> 
<TITLE>Authorization required</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Authorization required</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:600) 
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563) 
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552) 
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530) 
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535) 
    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:631) 
    at com.google.gdata.client.Service.getFeed(Service.java:1017) 
    at mui.server.services.TokenServiceImpl.getDocsInfo(TokenServiceImpl.java:52) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100) 
    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: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) 

私は何が欠けていますか?私は本当に混乱しています...私はすべてこれで、最初は愚かなものかもしれません...しかし、ちょうど正確にガイドに書かれているものではありませんか? ここにこの例では http://code.google.com/intl/it-IT/apis/documents/docs/2.0/developers_guide_java.html#ListDocs 私は取得したトークンを使用する必要がありますか?

答えて

0

2つのステップがより必要とされた。

String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null); 

2)クライアントにトークンを関連付ける:

DocsService client = new DocsService("yourCo-yourAppName-v1"); 
    client.setAuthSubToken(sessionToken); 

1)はトークンを "はsessionToken" に変更