0

I'm trying to use SocialAuth and i'm setting it up according to this guide: https://github.com/3pillarlabs/socialauth/wiki/Getting-Started-with-implementing-SocialAuth

It goes well, except for the part session.setAttribute("authManager", manager); which throws a NotSerializableException. According to the guide I have to store the SocialAuthManager object in the session, however it gives me this stacktrace:

java.lang.RuntimeException: java.io.NotSerializableException: org.apache.commons.logging.impl.Jdk14Logger
    at com.google.appengine.tools.development.SerializableObjectsOnlyHashSessionManager$SerializableObjectsOnlyHttpSession.checkCanSerialize(SerializableObjectsOnlyHashSessionManager.java:66)
    at com.google.appengine.tools.development.SerializableObjectsOnlyHashSessionManager$SerializableObjectsOnlyHttpSession.setAttribute(SerializableObjectsOnlyHashSessionManager.java:43)
    at cd.orbit.server.AuthServlet.doPost(AuthServlet.java:57)
    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.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    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.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    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:98)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
    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)
Caused by: java.io.NotSerializableException: org.apache.commons.logging.impl.Jdk14Logger
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at com.google.appengine.tools.development.SerializableObjectsOnlyHashSessionManager$SerializableObjectsOnlyHttpSession.checkCanSerialize(SerializableObjectsOnlyHashSessionManager.java:64)
    ... 39 more

Now how do I use this? Anyone familiar with the SocialAuth library?

user717572
  • 3,626
  • 7
  • 35
  • 60
  • What is the class name for session object you are using here? – Kalher May 29 '14 at 14:33
  • javax.servlet.http.HttpServletRequest.getSession() -> HttpSession – user717572 May 29 '14 at 14:36
  • My guess is that `manager` object isn't serializable – j3ny4 May 29 '14 at 14:38
  • SocialAuthManager does implement the Serializable interface. It's a class from the library, however it still throws the NotSerializableException. – user717572 May 29 '14 at 14:47
  • Please see http://www.theserverside.com/discussions/thread.tss?thread_id=20148 – j3ny4 May 29 '14 at 14:56
  • I don't see how this answers my problem, the class is Serializable. – user717572 May 29 '14 at 14:58
  • Having `implements Serializable` on the class definition doesn't guarantee that every instance of the class is Serializable indeed. From looking into class code https://code.google.com/p/socialauth/source/browse/trunk/socialauth-core/src/org/brickred/socialauth/SocialAuthManager.java?r=383 it looks like `providersMap` could include non-serializable data in it. `Log` implementation could be non-serializable too. – j3ny4 May 29 '14 at 15:05

1 Answers1

1

You're trying to store manager object on the HttpSession. Be aware that the objects that you store on the session has to be serializable. It looks like SocialAuthManager class isn't really Serializable even though it claims so:

  • SocialAuthConfig isn't serializable

  • A Log implementation object could be non-serializable

  • The values within providersMap could be non-serializable

j3ny4
  • 442
  • 2
  • 8
  • I understand, but the 'getting started' states explicitly to "Store !!SocialAuthManager object in session". So how would I do this now, or what do if I don't store it? – user717572 May 29 '14 at 15:36