Author: violetagg Date: Thu Aug 15 14:06:20 2013 New Revision: 1514281 URL: http://svn.apache.org/r1514281 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55357 Set the web app classloader as a context classloader before reading the object data.
Modified: tomcat/trunk/java/org/apache/catalina/session/FileStore.java tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Modified: tomcat/trunk/java/org/apache/catalina/session/FileStore.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/FileStore.java?rev=1514281&r1=1514280&r2=1514281&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/FileStore.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/FileStore.java Thu Aug 15 14:06:20 2013 @@ -250,6 +250,7 @@ public final class FileStore extends Sto ObjectInputStream ois = null; Loader loader = null; ClassLoader classLoader = null; + ClassLoader oldThreadContextCL = Thread.currentThread().getContextClassLoader(); try { fis = new FileInputStream(file.getAbsolutePath()); bis = new BufferedInputStream(fis); @@ -258,10 +259,18 @@ public final class FileStore extends Sto loader = context.getLoader(); if (loader != null) classLoader = loader.getClassLoader(); - if (classLoader != null) + if (classLoader != null) { + Thread.currentThread().setContextClassLoader(classLoader); ois = new CustomObjectInputStream(bis, classLoader); - else + } else { ois = new ObjectInputStream(bis); + } + + StandardSession session = + (StandardSession) manager.createEmptySession(); + session.readObjectData(ois); + session.setManager(manager); + return (session); } catch (FileNotFoundException e) { if (manager.getContext().getLogger().isDebugEnabled()) manager.getContext().getLogger().debug("No persisted data file found"); @@ -282,21 +291,16 @@ public final class FileStore extends Sto } } throw e; - } - - try { - StandardSession session = - (StandardSession) manager.createEmptySession(); - session.readObjectData(ois); - session.setManager(manager); - return (session); } finally { - // Close the input stream - try { - ois.close(); - } catch (IOException f) { - // Ignore + if (ois != null) { + // Close the input stream + try { + ois.close(); + } catch (IOException f) { + // Ignore + } } + Thread.currentThread().setContextClassLoader(oldThreadContextCL); } } Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1514281&r1=1514280&r2=1514281&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Thu Aug 15 14:06:20 2013 @@ -607,6 +607,7 @@ public class JDBCStore extends StoreBase return (null); } + ClassLoader oldThreadContextCL = Thread.currentThread().getContextClassLoader(); try { if (preparedLoadSql == null) { String loadSql = "SELECT " + sessionIdCol + ", " @@ -629,6 +630,7 @@ public class JDBCStore extends StoreBase classLoader = loader.getClassLoader(); } if (classLoader != null) { + Thread.currentThread().setContextClassLoader(classLoader); ois = new CustomObjectInputStream(bis, classLoader); } else { @@ -667,6 +669,7 @@ public class JDBCStore extends StoreBase // Ignore } } + Thread.currentThread().setContextClassLoader(oldThreadContextCL); release(_conn); } numberOfTries--; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org