User: reverbel
Date: 01/10/30 06:15:24
Modified:iiop/src/main/org/jboss/ejb/plugins/iiop CDRStream.java
Log:
Adding a PortableRemoteObject.narrow() call within the unmarshalling method for
remote inferfaces (method read() of the inner class RemoteReader), to do stub
downloading.
Revision ChangesPath
1.3 +25 -14contrib/iiop/src/main/org/jboss/ejb/plugins/iiop/CDRStream.java
Index: CDRStream.java
===
RCS file:
/cvsroot/jboss/contrib/iiop/src/main/org/jboss/ejb/plugins/iiop/CDRStream.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CDRStream.java2001/08/28 22:07:53 1.2
+++ CDRStream.java2001/10/30 14:15:24 1.3
@@ -11,6 +11,7 @@
import java.io.Serializable;
import java.rmi.Remote;
import javax.rmi.CORBA.Util;
+import javax.rmi.PortableRemoteObject;
import org.omg.CORBA_2_3.portable.InputStream;
import org.omg.CORBA_2_3.portable.OutputStream;
@@ -26,7 +27,7 @@
* defined by codeCDRStream/code.
*
* @author a href=mailto:[EMAIL PROTECTED];Francisco Reverbel/a
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public class CDRStream
{
@@ -54,7 +55,7 @@
* br
* pre
*java.lang.StringG (strinG)
-*RMI/IDL remote interfaceR
+*RMI/IDL remote interfaceR + interfaceName
*RMI/IDL abstract interface A
*serializableE (sErializablE)
*valuetype L + className
@@ -99,7 +100,7 @@
return G; // strinG
}
else if (RmiIdlUtil.isRMIIDLRemoteInterface(clz)) {
- return R; // Remote interface
+ return R + clz.getName(); // Remote interface
}
else if (isAbstractInterface(clz)) {
return A; // Abstract interface
@@ -165,7 +166,13 @@
case 'O':
return ObjectReader.instance;
case 'R':
- return RemoteReader.instance;
+ try {
+return new RemoteReader(cl.loadClass(s.substring(1)));
+ }
+ catch (ClassNotFoundException e) {
+throw new RuntimeException(Error loading class
+ + s.substring(1) + : + e);
+ }
case 'S':
return ShortReader.instance;
case 'V':
@@ -268,7 +275,7 @@
return StringReader.instance;
}
else if (RmiIdlUtil.isRMIIDLRemoteInterface(clz)) {
- return RemoteReader.instance;
+ return new RemoteReader(clz);
}
else if (isAbstractInterface(clz)) {
return AbstractInterfaceReader.instance;
@@ -532,25 +539,30 @@
public Object read(InputStream in)
{
- //return org.omg.CORBA.WStringValueHelper.read(in);
- return in.read_value(String.class);
+ return in.read_value(String.class);
}
}
/**
-* Singleton class that unmarshals codejava.rmi.Remote/code objects
-* from a CDR input stream.
+* Class that unmarshals codejava.rmi.Remote/code objects from a CDR
+* input stream. A codeRemoteReader/code is specific for a given
+* remote interface, which is passed as a parameter to the
+* codeRemoteReader/code constructor.
*/
private static final class RemoteReader
implements CDRStreamReader
{
- static final CDRStreamReader instance = new RemoteReader();
+ private Class clz;
- private RemoteReader() { }
+ RemoteReader(Class clz) {
+ this.clz = clz;
+ }
public Object read(InputStream in)
{
- return in.read_Object();
+ // The narrow() call downloads the stub from the codebase embedded
+ // within the IOR of the unmarshalled object.
+ return PortableRemoteObject.narrow(in.read_Object(), clz);
}
}
@@ -813,8 +825,7 @@
public void write(OutputStream out, Object obj)
{
- //org.omg.CORBA.WStringValueHelper.write(out, (String)obj);
- out.write_value((String)obj, String.class);
+ out.write_value((String)obj, String.class);
}
}
___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development