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  Changes    Path
  1.3       +25 -14    contrib/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.java    2001/08/28 22:07:53     1.2
  +++ CDRStream.java    2001/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 <code>CDRStream</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.String            "G" (strinG)
  -    *    RMI/IDL remote interface    "R"
  +    *    RMI/IDL remote interface    "R" + interfaceName
       *    RMI/IDL abstract interface  "A"
       *    serializable                "E" (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 <code>java.rmi.Remote</code> objects
  -    * from a CDR input stream.
  +    * Class that unmarshals <code>java.rmi.Remote</code> objects from a CDR 
  +    * input stream. A <code>RemoteReader</code> is specific for a given 
  +    * remote interface, which is passed as a parameter to the 
  +    * <code>RemoteReader</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

Reply via email to