[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