UserService not works with GaeStudio

Issue #13 on hold
Former user created an issue

Hello,

I'm tring to install GaeStudio. If a not login to my application, it's works fine. But when a login to the application. I can access to GaeStudio, and it's works fine, but my application not works now with an error in the UserServiceImpl :

java.lang.NoSuchMethodError: com.google.appengine.api.users.User.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    at com.google.appengine.api.users.UserServiceImpl.getCurrentUser(UserServiceImpl.java:107)
    at cef.kephas.server.api.output.OutputAPIV2.getUser(OutputAPIV2.java:206)
    at cef.kephas.server.api.output.OutputAPIV2.manageHTML(OutputAPIV2.java:140)
    at cef.kephas.server.api.output.OutputAPIV2.output(OutputAPIV2.java:96)
    at cef.kephas.server.EgliseInfoServlet.doGet(EgliseInfoServlet.java:121)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    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.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66)
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at cef.kephas.server.filter.NamespaceFilter.doFilter(NamespaceFilter.java:36)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:57)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at cef.kephas.server.filter.CORSFilter.doFilter(CORSFilter.java:49)
    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: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 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:446)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
    at java.lang.Thread.run(Thread.java:724)

I use the federated user options in GAE.

Comments (21)

  1. Simon-Pierre Gingras

    We could try to see from which jar the User class is loaded.

    Try this (just before your call to UserService.getCurrentUser():

    ClassLoader classLoader = User.class.getClassLoader();
    
    System.out.println(classLoader.getResource("com/google/appengine/api/users/User.class"));
    

    This will print the jar from which the User class was loaded.

  2. Patrice de Saint Steban

    jar:file:/base/data/home/apps/s~egliseinfo-catholique-fr/gae-studio.373557782956034603/WEB-INF/lib/_ah_compiled_jsps-0000.jar!/com/google/appengine/api/users/User.class

  3. Simon-Pierre Gingras

    Can you inspect the contents of that jar and confirm that the User class does not have the constructor User(String, String, String, String) ?

  4. Patrice de Saint Steban

    The "_ah_compiled_jsps-0000.jar" is a jar compiled in appengine. I can't access to online appengine files.

  5. Simon-Pierre Gingras

    Okay, I thought you were experiencing this issue when running your app from your local machine. So if I'm understanding correctly, you're experiencing this issue with an app deployed on appspot, right?

  6. Simon-Pierre Gingras

    I've deployed an app on appspot with GaeStudio installed in it, and I don't experience your problem. I don't get the NoSuchMethodError.

    In my instance, it says that the User class is loaded from the appengine-api.jar :

    jar:file:/base/java7_runtime/api/appengine-api.jar!/com/google/appengine/api/users/User.class
    

    I'm wondering why your app would load the User class from _ah_compiled_jsps-0000.jar ...

  7. Patrice de Saint Steban

    The Four parameters User class :

    User(java.lang.String email, java.lang.String authDomain, java.lang.String userId, java.lang.String federatedIdentity)
    Creates a new User with a federated identity.
    

    Is used with the federated identity login, with this login option, you can login with open id provider. For this, you must implement the login page /_ah/login_required

  8. Simon-Pierre Gingras

    Okay I see, I'll update my sample project with this ASAP, and I'll see if the federated login breaks anything on my side.

  9. Log in to comment