on reading from google drive

164 views
Skip to first unread message

Vivek Kumar

unread,
Jun 13, 2013, 11:32:11 PM6/13/13
to google-a...@googlegroups.com

Vinny P

unread,
Jun 14, 2013, 11:59:34 AM6/14/13
to google-a...@googlegroups.com
Hello,

On Thursday, June 13, 2013 10:32:11 PM UTC-5, Vivek Kumar wrote:

The authorization code is passed back through the redirect URL you provided.

For example, here's a picture of the process to create an application: http://imgur.com/a/UUXyI . You put a redirect URL in the section where it says "Authorized Redirect URLs"; this way the user will be redirected back to the app after they grant the app permissions to access their (the user's) account information. But the redirect URL will also contain a ?code= parameter, which contains the authorization code that you can exchange for access credentials. For instance, if you set a redirect URL of example.com/oauth, then the redirect URL that your app will receive will look like: example.com/oauth?code=Ud3wq8943. Retrieve the authorization code (it's just a standard parameter, use req.getParameter("code") ), and send it back to Google to get back access credentials (that's what the code fragment you posted does).

BTW, the Java client library handles all of this automagically. Look through the javadocs.


-----------------
-Vinny P
Technology & Media Advisor
Chicago, IL

My Go side project: http://invalidmail.com/

Vivek Kumar

unread,
Jun 14, 2013, 1:00:59 PM6/14/13
to google-a...@googlegroups.com
Vinay


" You put a redirect URL in the section where it says "Authorized Redirect URLs"; this way the user will be redirected back to the app after they grant the app permissions to access their (the user's) account information. But the redirect URL will also contain a ?code= parameter,"

I dont have any users doing any explicit action. Our app sitting in GAE need to access google docs without any user intervention

Vik



--
You received this message because you are subscribed to the Google Groups "Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-appengi...@googlegroups.com.
To post to this group, send email to google-a...@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Vinny P

unread,
Jun 14, 2013, 1:17:19 PM6/14/13
to google-a...@googlegroups.com
On Friday, June 14, 2013 12:00:59 PM UTC-5, Vivek Kumar wrote:
I dont have any users doing any explicit action. Our app sitting in GAE need to access google docs without any user intervention


Then you chose the wrong authentication scheme. In your SO post you linked to the web app authentication scheme. If you have no users and need to connect to Google, you need to use the Service Account authentication scheme (it's the second radio option on the second picture in this album: http://imgur.com/a/UUXyI ). The documentation for the service account login is here: https://developers.google.com/accounts/docs/OAuth2ServiceAccount but essentially you have to cryptographically sign yourself. There is a library and code example here: https://code.google.com/p/google-api-java-client/wiki/OAuth2#Service_Accounts

Vivek Kumar

unread,
Jun 14, 2013, 1:43:31 PM6/14/13
to google-a...@googlegroups.com
Well we cant use service account scheme as that one restricts completely to view or modify docs linked to that account using drive UI.
So, we still want to read a particular users docs but without user to authenticate explictly

Vinny P

unread,
Jun 14, 2013, 1:51:05 PM6/14/13
to google-a...@googlegroups.com
On Friday, June 14, 2013 12:43:31 PM UTC-5, Vivek Kumar wrote:
So, we still want to read a particular users docs but without user to authenticate explictly


Just to be clear, you want to read a user's documents, but not need the user's authentication approval? If that were possible, that would be a huge security hole.

Perhaps you should explain more on what you want your application to do. 

Vivek Kumar

unread,
Jun 14, 2013, 5:56:23 PM6/14/13
to google-a...@googlegroups.com
well I dont think so. I did not say that reading any random users account.  Facebook, twitter does that all the time where you can read the stream of a user using his accessToken etc. You authenticate the app via settings to let it access the account offline and then your app does not need to user manually authenticate it

Vinny P

unread,
Jun 15, 2013, 12:53:26 PM6/15/13
to google-a...@googlegroups.com
On Friday, June 14, 2013 4:56:23 PM UTC-5, Vivek Kumar wrote:
well I dont think so. I did not say that reading any random users account.  Facebook, twitter does that all the time where you can read the stream of a user using his accessToken etc. You authenticate the app via settings to let it access the account offline and then your app does not need to user manually authenticate it


Then my first reply still stands.

You need the user to first explicitly grant your application permission to access their documents (that's the authorization code). Your application turns over that authorization code to Google and gets back credentials (which is the Credentials object in the Java Google Drive library). You can then save these credentials to the datastore, flat file, etc and then use them for an indefinite period of time (or until the user revokes your app's permissions).

Here is some sample code (it's the DrEdit example application from Google): https://github.com/googledrive/dredit/blob/master/java/src/com/google/drive/samples/dredit/DrEditServlet.java . If you look at lines 163 through 182 (the method handleCallbackIfRequired), the application takes the auth code, gets access credentials from it, and then saves the access credentials to the datastore for use later on.

Vivek Kumar

unread,
Jun 17, 2013, 1:34:13 AM6/17/13
to google-a...@googlegroups.com
Thanks Vinay

I am not sure why references for

import com.google.api.services.oauth2.Oauth2;

import com.google.api.services.oauth2.model.Userinfo;


are not getting resolved though I have downloaded all the drive and oauth related jars and they are in my eclipse project class path



Please advise


Vik




Vinny P

unread,
Jun 17, 2013, 2:44:29 PM6/17/13
to google-a...@googlegroups.com
On Mon, Jun 17, 2013 at 12:34 AM, Vik <vik...@gmail.com> wrote:
Thanks Vinny

I am not sure why references for

import com.google.api.services.oauth2.Oauth2;

import com.google.api.services.oauth2.model.Userinfo;

are not getting resolved though I have downloaded all the drive and oauth related jars and they are in my eclipse project class path

 

 
Those libraries are available through Maven. Add the XML at this page to retrieve the libs:
 

Vivek Kumar

unread,
Jun 17, 2013, 3:32:26 PM6/17/13
to google-a...@googlegroups.com
we dont use maven so how do we get these? 



Vinny P

unread,
Jun 17, 2013, 4:09:51 PM6/17/13
to google-a...@googlegroups.com
On Mon, Jun 17, 2013 at 2:32 PM, Vik <vik...@gmail.com> wrote:
we dont use maven so how do we get these? 

 
 
You can still download files from Maven. Here's the URL to the Maven repo for the Google OAuth libraries: http://search.maven.org/#browse%7C-2090385365 . Look for the file marked google-api-services-oauth2-v2-rev39-1.15.0-rc.jar, download it, and copy it to the lib folder of your project. Remember to add the JAR to your app's build path. 

Vivek Kumar

unread,
Jun 18, 2013, 9:31:48 PM6/18/13
to google-a...@googlegroups.com
Hi

I tried to use the code as below 

package vik.sakshum.sakshumweb.server.common;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.oauth2.Oauth2;
import com.google.api.services.oauth2.model.Userinfo;
import com.google.gson.Gson;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * Abstract servlet that sets up credentials and provides some convenience
 * methods.
 *
 * @author vicf...@google.com (Vic Fryzel)
 * @author j...@google.com (Burcu Dogan)
 */
@SuppressWarnings("serial")
public abstract class GoogleDriveAuth extends RemoteServiceServlet {
  /**
   * Default transportation layer for Google Apis Java client.
   */
  protected static final HttpTransport TRANSPORT = new NetHttpTransport();
  
  /**
   * Default JSON factory for Google Apis Java client.
   */
  protected static final JsonFactory JSON_FACTORY = new JacksonFactory();

  /**
   * Key to get/set userId from and to the session.
   */
  public static final String KEY_SESSION_USERID = "user_id";

  /**
   * Default MIME type of files created or handled by DrEdit.
   * This is also set in the Google APIs Console under the Drive SDK tab.
   */
  public static final String DEFAULT_MIMETYPE = "text/plain";

  /**
   * Path component under war/ to locate client_secrets.json file.
   */
  public static final String CLIENT_SECRETS_FILE_PATH
      = "/WEB-INF/client_secrets.json";

  /**
   * A credential manager to get, set, delete credential objects.
   */
  private CredentialManager credentialManager = null;

  /**
   * Initializes the Servlet.
   *
  @Override
  public void init() throws ServletException {
    super.init();
    // init credential manager
//    credentialManager = new CredentialManager(
//        getClientSecrets(), TRANSPORT, JSON_FACTORY);
  }*/

  /**
   * Dumps the given object as JSON and responds with given HTTP status code.
   * @param resp  Response object.
   * @param code  HTTP status code to respond with.
   * @param obj   An object to be dumped as JSON.
   */
  protected void sendJson(HttpServletResponse resp, int code, Object obj) {
    try {
      // TODO(burcud): Initialize Gson instance for once.
      resp.setContentType("application/json");
      resp.getWriter().print(new Gson().toJson(obj).toString());
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * Dumps the given object to JSON and responds with HTTP 200.
   * @param resp  Response object.
   * @param obj   An object to be dumped as JSON.
   */
  protected void sendJson(HttpServletResponse resp, Object obj) {
    sendJson(resp, 200, obj);
  }

  /**
   * Responds with the given HTTP status code and message.
   * @param resp  Response object.
   * @param code  HTTP status code to respond with.
   * @param message Message body.
   */
  protected void sendError(HttpServletResponse resp, int code, String message) {
    try {
      resp.sendError(code, message);
    } catch (IOException e) {
      throw new RuntimeException(message);
    }
  }

  /**
   * Transforms a GoogleJsonResponseException to an HTTP response.
   * @param resp  Response object.
   * @param e     Exception object to transform.
   */
  protected void sendGoogleJsonResponseError(HttpServletResponse resp,
      GoogleJsonResponseException e) {
    sendError(resp, e.getStatusCode(), e.getLocalizedMessage());
  }

  /**
   * Redirects to OAuth2 consent page if user is not logged in.
   * @param req   Request object.
   * @param resp  Response object.
   */
  protected void loginIfRequired(HttpServletRequest req,
      HttpServletResponse resp) {
    Credential credential = getCredential(req, resp);
    if (credential == null) {
      // redirect to authorization url
      try {
        resp.sendRedirect(credentialManager.getAuthorizationUrl());
      } catch (IOException e) {
        throw new RuntimeException("Can't redirect to auth page");
      }
    }
  }

  /**
   * If OAuth2 redirect callback is invoked and there is a code query param,
   * retrieve user credentials and profile. Then, redirect to the home page.
   * @param req   Request object.
   * @param resp  Response object.
   * @throws IOException
   */
  protected void handleCallbackIfRequired(HttpServletRequest req,
      HttpServletResponse resp) throws IOException {
    String code = req.getParameter("code");
    System.out.println("Code is:" + code);
    if (code != null) {
      // retrieve new credentials with code
      Credential credential = credentialManager.retrieve(code);
      // request userinfo
      Oauth2 service = getOauth2Service(credential);
      try {
        Userinfo about = service.userinfo().get().execute();
        String id = about.getId();
        credentialManager.save(id, credential);
        req.getSession().setAttribute(KEY_SESSION_USERID, id);
        
        System.out.println("vik:: accessToken:" + credential.getAccessToken() + " refreshToken:" + credential.getRefreshToken());
      } catch (IOException e) {
        throw new RuntimeException("Can't handle the OAuth2 callback, " + 
            "make sure that code is valid.");
      }
      resp.sendRedirect("/");
    }
  }
  
  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
 System.out.println("start of GoogleDriveAuth:::::::");
 credentialManager = new CredentialManager(
       getClientSecrets(), TRANSPORT, JSON_FACTORY);
 handleCallbackIfRequired(req, resp);
  }

  /**
   * Returns the credentials of the user in the session. If user is not in the
   * session, returns null.
   * @param req   Request object.
   * @param resp  Response object.
   * @return      Credential object of the user in session or null.
   */
  protected Credential getCredential(HttpServletRequest req,
      HttpServletResponse resp) {
    String userId = (String) req.getSession().getAttribute(KEY_SESSION_USERID);
    if (userId != null) {
      return credentialManager.get(userId);
    }
    return null;
  }

  /**
   * Deletes the credentials of the user in the session permanently and removes
   * the user from the session.
   * @param req   Request object.
   * @param resp  Response object.
   */
  protected void deleteCredential(HttpServletRequest req,
      HttpServletResponse resp) {
    String userId = (String) req.getSession().getAttribute(KEY_SESSION_USERID);
    if (userId != null) {
      credentialManager.delete(userId);
      req.getSession().removeAttribute(KEY_SESSION_USERID);
    }
  }

  /**
   * Build and return a Drive service object based on given request parameters.
   * @param credential User credentials.
   * @return Drive service object that is ready to make requests, or null if
   *         there was a problem.
   */
  protected Drive getDriveService(Credential credential) {
    return new Drive.Builder(TRANSPORT, JSON_FACTORY, credential).build();
  }

  /**
   * Build and return an Oauth2 service object based on given request parameters.
   * @param credential User credentials.
   * @return Drive service object that is ready to make requests, or null if
   *         there was a problem.
   */
  protected Oauth2 getOauth2Service(Credential credential) {
    return new Oauth2.Builder(TRANSPORT, JSON_FACTORY, credential).build();
  }

  /**
   * Reads client_secrets.json and creates a GoogleClientSecrets object.
   * @return A GoogleClientsSecrets object.
   */
  private GoogleClientSecrets getClientSecrets() {
    // TODO: do not read on each request
    InputStream stream =
        getServletContext().getResourceAsStream(CLIENT_SECRETS_FILE_PATH);
    try {
      return GoogleClientSecrets.load(JSON_FACTORY, stream);
    } catch (IOException e) {
      throw new RuntimeException("No client_secrets.json found");
    }
  }
}


But on running the servlet url as http://www.sakshum.org/GoogleOauth it throws 500 error with below exceptions in the logs
  1. javax.servlet.ServletContext log: unavailable
    java.lang.InstantiationException
    	at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    	at java.lang.Class.newInstance0(Class.java:370)
    	at java.lang.Class.newInstance(Class.java:323)
    	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.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57)
    	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 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
    	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.headerComplete(HttpConnection.java:923)
    	at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490)
    	at com.google.tracing.TraceContext.runInContext(TraceContext.java:777)
    	at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487)
    	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    	at java.lang.Thread.run(Thread.java:722)
    
  2. W2013-06-18 18:26:57.398
    /GoogleOauth
    java.lang.InstantiationException
    	at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    	at java.lang.Class.newInstance0(Class.java:370)
    	at java.lang.Class.newInstance(Class.java:323)
    	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.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57)
    	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 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
    	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.headerComplete(HttpConnection.java:923)
    	at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490)
    	at com.google.tracing.TraceContext.runInContext(TraceContext.java:777)
    	at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487)
    	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    	at java.lang.Thread.run(Thread.java:722)
    
  3. C2013-06-18 18:26:57.478
    Uncaught exception from servlet
    java.lang.InstantiationException
    	at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    	at java.lang.Class.newInstance0(Class.java:370)
    	at java.lang.Class.newInstance(Class.java:323)
    	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.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    	at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57)
    	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 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.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
    	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.headerComplete(HttpConnection.java:923)
    	at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
    	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:439)
    	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:483)
    	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490)
    	at com.google.tracing.TraceContext.runInContext(TraceContext.java:777)
    	at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345)
    	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:337)
    	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487)
    	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    	at java.lang.Thread.run(Thread.java:722)



Vivek Kumar

unread,
Jun 20, 2013, 12:22:37 AM6/20/13
to google-a...@googlegroups.com
any help on this please?
Reply all
Reply to author
Forward
0 new messages