Author: markt Date: Thu Jan 3 14:04:48 2008 New Revision: 608654 URL: http://svn.apache.org/viewvc?rev=608654&view=rev Log: Improve fix for 43840 with better error handling, a better variable name and a bit of other clean-up.
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/ha/session/SerializablePrincipal.java tomcat/trunk/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java Modified: tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties?rev=608654&r1=608653&r2=608654&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties Thu Jan 3 14:04:48 2008 @@ -109,3 +109,4 @@ standardSession.setAttribute.ise=setAttribute: Session already invalidated standardSession.setAttribute.namenull=setAttribute: name parameter cannot be null standardSession.sessionCreated=Created Session id = {0} +serializablePrincipal.readPrincipal.cnfe=readPrincipal: Failed to recreate user Principal \ No newline at end of file Modified: tomcat/trunk/java/org/apache/catalina/ha/session/SerializablePrincipal.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/SerializablePrincipal.java?rev=608654&r1=608653&r2=608654&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/SerializablePrincipal.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/SerializablePrincipal.java Thu Jan 3 14:04:48 2008 @@ -19,6 +19,7 @@ package org.apache.catalina.ha.session; +import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Serializable; @@ -30,6 +31,7 @@ import org.apache.catalina.Realm; import org.apache.catalina.realm.GenericPrincipal; +import org.apache.catalina.util.StringManager; /** @@ -42,6 +44,14 @@ */ public class SerializablePrincipal implements java.io.Serializable { + protected static org.apache.juli.logging.Log log = + org.apache.juli.logging.LogFactory.getLog(SerializablePrincipal.class); + + /** + * The string manager for this package. + */ + protected static StringManager sm = + StringManager.getManager(Constants.Package); // ----------------------------------------------------------- Constructors @@ -201,7 +211,8 @@ userPrincipal); } - public static GenericPrincipal readPrincipal(ObjectInput in, Realm realm) throws java.io.IOException{ + public static GenericPrincipal readPrincipal(ObjectInput in, Realm realm) + throws IOException, ClassNotFoundException { String name = in.readUTF(); boolean hasPwd = in.readBoolean(); String pwd = null; @@ -209,21 +220,23 @@ int size = in.readInt(); String[] roles = new String[size]; for ( int i=0; i<size; i++ ) roles[i] = in.readUTF(); - Principal innerPrincipal = null; - boolean hasInnerPrincipal = in.readBoolean(); - if (hasInnerPrincipal) { + Principal userPrincipal = null; + boolean hasUserPrincipal = in.readBoolean(); + if (hasUserPrincipal) { try { - innerPrincipal = (Principal) in.readObject(); + userPrincipal = (Principal) in.readObject(); } catch (ClassNotFoundException e) { - // Failed to read inner Principal - e.printStackTrace(); + log.error(sm.getString( + "serializablePrincipal.readPrincipal.cnfe"), e); + throw e; } } return new GenericPrincipal(realm,name,pwd,Arrays.asList(roles), - innerPrincipal); + userPrincipal); } - public static void writePrincipal(GenericPrincipal p, ObjectOutput out) throws java.io.IOException { + public static void writePrincipal(GenericPrincipal p, ObjectOutput out) + throws IOException { out.writeUTF(p.getName()); out.writeBoolean(p.getPassword()!=null); if ( p.getPassword()!= null ) out.writeUTF(p.getPassword()); @@ -231,10 +244,10 @@ if ( roles == null ) roles = new String[0]; out.writeInt(roles.length); for ( int i=0; i<roles.length; i++ ) out.writeUTF(roles[i]); - boolean hasInnerPrincipal = (p != p.getUserPrincipal() && + boolean hasUserPrincipal = (p != p.getUserPrincipal() && p.getUserPrincipal() instanceof Serializable); - out.writeBoolean(hasInnerPrincipal); - if (hasInnerPrincipal) out.writeObject(p.getUserPrincipal()); + out.writeBoolean(hasUserPrincipal); + if (hasUserPrincipal) out.writeObject(p.getUserPrincipal()); } Modified: tomcat/trunk/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java?rev=608654&r1=608653&r2=608654&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java (original) +++ tomcat/trunk/test/org/apache/catalina/ha/session/TestSerializablePrincipal.java Thu Jan 3 14:04:48 2008 @@ -82,6 +82,9 @@ } catch (IOException e) { e.printStackTrace(); fail("ioe de-serializing principal"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + fail("cnfe de-serializing principal"); } // Now test how similar original and de-serialized versions are --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]