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 [email protected] (Vic Fryzel)
 * @author [email protected] (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)



Thankx and Regards

Vik
Founder
http://www.sakshum.org
http://blog.sakshum.org


On Fri, Jun 14, 2013 at 8:59 AM, Vinny P <[email protected]> wrote:

> Hello,
>
> On Thursday, June 13, 2013 10:32:11 PM UTC-5, Vivek Kumar wrote:
>
>> Can someone help us on this please
>> http://stackoverflow.com/**questions/17057978/issues-in-**
>> implementing-server-side-**authorization-to-google-drive<http://stackoverflow.com/questions/17057978/issues-in-implementing-server-side-authorization-to-google-drive>
>>
>>
> 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/
>
>  --
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/google-appengine.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-appengine.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to