[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/serialization/impl/java ...

Ron Sigal ron_sigal at yahoo.com
Fri May 18 22:25:12 EDT 2007


  User: rsigal  
  Date: 07/05/18 22:25:12

  Modified:    src/main/org/jboss/remoting/serialization/impl/java  Tag:
                        remoting_2_x JavaSerializationManager.java
  Log:
  JBREM-714: Added versioned versions of receiveObject(), sendObject().
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.8.4.3   +123 -23   JBossRemoting/src/main/org/jboss/remoting/serialization/impl/java/JavaSerializationManager.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: JavaSerializationManager.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/serialization/impl/java/JavaSerializationManager.java,v
  retrieving revision 1.8.4.2
  retrieving revision 1.8.4.3
  diff -u -b -r1.8.4.2 -r1.8.4.3
  --- JavaSerializationManager.java	2 Nov 2006 18:57:48 -0000	1.8.4.2
  +++ JavaSerializationManager.java	19 May 2007 02:25:12 -0000	1.8.4.3
  @@ -27,15 +27,17 @@
   import java.io.InputStream;
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
  +import java.io.OptionalDataException;
   import java.io.OutputStream;
   import org.jboss.logging.Logger;
  +import org.jboss.remoting.Version;
   import org.jboss.remoting.loading.ObjectInputStreamWithClassLoader;
   import org.jboss.remoting.serialization.SerializationManager;
   import org.jboss.remoting.serialization.SerializationStreamFactory;
   import org.jboss.remoting.serialization.IMarshalledValue;
   
   /**
  - * $Id: JavaSerializationManager.java,v 1.8.4.2 2006/11/02 18:57:48 rsigal Exp $
  + * $Id: JavaSerializationManager.java,v 1.8.4.3 2007/05/19 02:25:12 rsigal Exp $
    *
    * @author <a href="mailto:clebert.suconic at jboss.com">Clebert Suconic</a>
    */
  @@ -80,20 +82,64 @@
   		return createdMarshalledValue(original);
   	}
   
  -   public void sendObject(ObjectOutputStream oos, Object dataObject) throws IOException
  +   public void sendObject(ObjectOutputStream oos, Object dataObject, int version) throws IOException
  +   {
  +      switch (version)
  +      {
  +         case Version.VERSION_1:
  +         case Version.VERSION_2:
  +            sendObjectVersion1_2(oos, dataObject);
  +            break;
  +            
  +         case Version.VERSION_2_2:
  +            sendObjectVersion2_2(oos, dataObject);
  +            break;
  +            
  +         default:
  +            throw new IOException("Can not process version " + version + ". " +
  +                  "Supported versions: " + Version.VERSION_1 + ", " + Version.VERSION_2 + ", " + Version.VERSION_2_2);
  +
  +      }
  +   }
  +   
  +   protected void sendObjectVersion1_2(ObjectOutputStream oos, Object dataObject) throws IOException
      {
  -      oos.reset();
         oos.writeObject(dataObject);
  -//      oos.reset();
  +      oos.reset();
         // to make sure stream gets reset
         // Stupid ObjectInputStream holds object graph
         // can only be set by the client/server sending a TC_RESET
  -//      oos.writeObject(Boolean.TRUE);
  +      oos.writeObject(Boolean.TRUE);
         oos.flush();
  -//      oos.reset();
  +      oos.reset();
      }
   
  -   public Object receiveObject(InputStream inputStream, ClassLoader customClassLoader) throws IOException, ClassNotFoundException
  +   protected void sendObjectVersion2_2(ObjectOutputStream oos, Object dataObject) throws IOException
  +   {
  +      oos.reset();
  +      oos.writeObject(dataObject);
  +      oos.flush();
  +   }
  +   
  +   public Object receiveObject(InputStream inputStream, ClassLoader customClassLoader, int version) throws IOException, ClassNotFoundException
  +   {
  +      switch (version)
  +      {
  +         case Version.VERSION_1:
  +         case Version.VERSION_2:
  +            return receiveObjectVersion1_2(inputStream, customClassLoader);
  +            
  +         case Version.VERSION_2_2:
  +            return receiveObjectVersion2_2(inputStream, customClassLoader);
  +            
  +         default:
  +            throw new IOException("Can not process version " + version + ". " +
  +                  "Supported versions: " + Version.VERSION_1 + ", " + Version.VERSION_2 + ", " + Version.VERSION_2_2);
  +
  +      }
  +   }
  +   
  +   protected Object receiveObjectVersion1_2(InputStream inputStream, ClassLoader customClassLoader) throws IOException, ClassNotFoundException
      {
         ObjectInputStream objInputStream = null;
         Object obj = null;
  @@ -129,20 +175,74 @@
            }
         }
   
  -
  +      try
  +      {
         obj = objInputStream.readObject();
  -//      try
  -//      {
  -//         objInputStream.readObject(); // for stupid ObjectInputStream reset
  -//      }
  -//      catch(Exception e)
  -//      {
  -//         /**
  -//          * Putting try catch around this because if using servlet sever invoker, the previous
  -//          * call is not needed, so will throw EOFException and can ignore.
  -//          */
  -//      }
  +      }
  +      catch (IOException e)
  +      {
  +         log.error("", e);
  +         throw e;
  +      }
  +
  +      try
  +      {
  +         objInputStream.readObject(); // for stupid ObjectInputStream reset
  +      }
  +      catch(Exception e)
  +      {
  +         /**
  +          * Putting try catch around this because if using servlet sever invoker, the previous
  +          * call is not needed, so will throw EOFException and can ignore.
  +          */
  +      }
         return obj;
      }
   
  +   protected Object receiveObjectVersion2_2(InputStream inputStream, ClassLoader customClassLoader) throws IOException, ClassNotFoundException
  +   {
  +      ObjectInputStream objInputStream = null;
  +      Object obj = null;
  +      if(inputStream instanceof ObjectInputStreamWithClassLoader)
  +      {
  +         if(((ObjectInputStreamWithClassLoader) inputStream).getClassLoader() == null)
  +         {
  +            ((ObjectInputStreamWithClassLoader) inputStream).setClassLoader(customClassLoader);
  +         }
  +         objInputStream = (ObjectInputStream) inputStream;
  +      }
  +      /*else if(inputStream instanceof JBossObjectInputStream)
  + {
  +     if(((JBossObjectInputStream) inputStream).getClassLoader() == null)
  +     {
  +        ((JBossObjectInputStream) inputStream).setClassLoader(customClassLoader);
  +     }
  +     objInputStream = (ObjectInputStream) inputStream;
  + } -- for future reference */
  +      else if(inputStream instanceof ObjectInputStream)
  +      {
  +         objInputStream = (ObjectInputStream) inputStream;
  +      }
  +      else
  +      {
  +         if(customClassLoader != null)
  +         {
  +            objInputStream = SerializationStreamFactory.getManagerInstance(SerializationStreamFactory.JAVA).createInput(inputStream, customClassLoader);
  +         }
  +         else
  +         {
  +            objInputStream = SerializationStreamFactory.getManagerInstance(SerializationStreamFactory.JAVA).createRegularInput(inputStream);
  +         }
  +      }
  +
  +
  +      obj = objInputStream.readObject();
  +
  +      if(inputStream instanceof ObjectInputStreamWithClassLoader)
  +      {
  +         ((ObjectInputStreamWithClassLoader) inputStream).clearCache();
  +      }
  +      
  +      return obj;
  +   }
   }
  
  
  



More information about the jboss-cvs-commits mailing list