User: reverbel
Date: 01/08/28 15:07:53
Modified: iiop/src/main/org/jboss/ejb/plugins/iiop CDRStream.java
Log:
CDRStream modified to support client stub generation. IIOPContainerInvoker
_all_interfaces() methods now return a clone of the id array.
Revision Changes Path
1.2 +206 -2 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CDRStream.java 2001/08/14 21:01:34 1.1
+++ CDRStream.java 2001/08/28 22:07:53 1.2
@@ -13,7 +13,6 @@
import javax.rmi.CORBA.Util;
import org.omg.CORBA_2_3.portable.InputStream;
import org.omg.CORBA_2_3.portable.OutputStream;
-import org.jboss.ejb.plugins.iiop.RmiIdlUtil;
/**
* Utility class with static methods to:
@@ -27,11 +26,213 @@
* defined by <code>CDRStream</code>.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Francisco Reverbel</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public class CDRStream
{
/**
+ * Returns the abbreviated name of the marshaller for given
+ * <code>Class</code>.
+ *
+ * <p>Abbreviated names of marshallers for basic types follow the usual
+ * Java convention:
+ * <br>
+ * <pre>
+ * type abbrev name
+ * boolean "Z"
+ * byte "B"
+ * char "C"
+ * double "D"
+ * float "F"
+ * int "I"
+ * long "J"
+ * short "S"
+ * void "V"
+ * </pre>
+ *
+ * <p>The abbreviated names of marshallers for object types are:
+ * <br>
+ * <pre>
+ * java.lang.String "G" (strinG)
+ * RMI/IDL remote interface "R"
+ * RMI/IDL abstract interface "A"
+ * serializable "E" (sErializablE)
+ * valuetype "L" + className
+ * externalizable "X" (eXternalizable)
+ * org.omg.CORBA.Object "M" (oMg)
+ * java.lang.Object "O"
+ * </pre>
+ *
+ * <p>As an example: the abbreviated name of a marshaller for a valuetype
+ * class named <code>Foo</code> is the string <code>"LFoo"</code>.
+ */
+ public static String abbrevFor(Class clz)
+ {
+ if (clz == Boolean.TYPE) {
+ return "Z";
+ }
+ else if (clz == Byte.TYPE) {
+ return "B";
+ }
+ else if (clz == Character.TYPE) {
+ return "C";
+ }
+ else if (clz == Double.TYPE) {
+ return "D";
+ }
+ else if (clz == Float.TYPE) {
+ return "F";
+ }
+ else if (clz == Integer.TYPE) {
+ return "I";
+ }
+ else if (clz == Long.TYPE) {
+ return "J";
+ }
+ else if (clz == Short.TYPE) {
+ return "S";
+ }
+ else if (clz == Void.TYPE) {
+ return "V";
+ }
+ else if (clz == String.class) {
+ return "G"; // strinG
+ }
+ else if (RmiIdlUtil.isRMIIDLRemoteInterface(clz)) {
+ return "R"; // Remote interface
+ }
+ else if (isAbstractInterface(clz)) {
+ return "A"; // Abstract interface
+ }
+ else if (Serializable.class.isAssignableFrom(clz)) {
+ if (clz == Serializable.class) {
+ return "E"; // sErializablE
+ }
+ else {
+ return "L" + clz.getName(); // vaLuetype
+ }
+ }
+ else if (Externalizable.class.isAssignableFrom(clz)) {
+ return "X"; // eXternalizable
+ }
+ else if (clz == org.omg.CORBA.Object.class) {
+ return "M"; // oMg (CORBA Object)
+ }
+ else if (clz == Object.class) {
+ return "O"; // Object
+ }
+ else {
+ return "L" + clz.getName(); // vaLuetype
+ }
+ }
+
+ /**
+ * Returns a <code>CDRStreamReader</code> given an abbreviated name
+ * and a <code>ClassLoader</code> for valuetype classes.
+ */
+ public static CDRStreamReader readerFor(String s, ClassLoader cl)
+ {
+ switch (s.charAt(0)) {
+
+ case 'A':
+ return AbstractInterfaceReader.instance;
+ case 'B':
+ return BooleanReader.instance;
+ case 'C':
+ return CharReader.instance;
+ case 'D':
+ return DoubleReader.instance;
+ case 'E':
+ return SerializableReader.instance;
+ case 'F':
+ return FloatReader.instance;
+ case 'G':
+ return StringReader.instance;
+ case 'I':
+ return IntReader.instance;
+ case 'J':
+ return LongReader.instance;
+ case 'L':
+ try {
+ return new ValuetypeReader(cl.loadClass(s.substring(1)));
+ }
+ catch (ClassNotFoundException e) {
+ throw new RuntimeException("Error loading class "
+ + s.substring(1) + ": " + e);
+ }
+ case 'M':
+ return CorbaObjectReader.instance;
+ case 'O':
+ return ObjectReader.instance;
+ case 'R':
+ return RemoteReader.instance;
+ case 'S':
+ return ShortReader.instance;
+ case 'V':
+ return null;
+ case 'X':
+ return ExternalizableReader.instance;
+ case 'Z':
+ return BooleanReader.instance;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns a <code>CDRStreamWriter</code> given an abbreviated name
+ * and a <code>ClassLoader</code> for valuetype classes.
+ */
+ public static CDRStreamWriter writerFor(String s, ClassLoader cl)
+ {
+ switch (s.charAt(0)) {
+
+ case 'A':
+ return AbstractInterfaceWriter.instance;
+ case 'B':
+ return BooleanWriter.instance;
+ case 'C':
+ return CharWriter.instance;
+ case 'D':
+ return DoubleWriter.instance;
+ case 'E':
+ return SerializableWriter.instance;
+ case 'F':
+ return FloatWriter.instance;
+ case 'G':
+ return StringWriter.instance;
+ case 'I':
+ return IntWriter.instance;
+ case 'J':
+ return LongWriter.instance;
+ case 'L':
+ try {
+ return new ValuetypeWriter(cl.loadClass(s.substring(1)));
+ }
+ catch (ClassNotFoundException e) {
+ throw new RuntimeException("Error loading class "
+ + s.substring(1) + ": " + e);
+ }
+ case 'M':
+ return CorbaObjectWriter.instance;
+ case 'O':
+ return ObjectWriter.instance;
+ case 'R':
+ return RemoteWriter.instance;
+ case 'S':
+ return ShortWriter.instance;
+ case 'V':
+ return null;
+ case 'X':
+ return ExternalizableWriter.instance;
+ case 'Z':
+ return BooleanWriter.instance;
+ default:
+ return null;
+ }
+ }
+
+ /**
* Returns the <code>CDRStreamReader</code> for a given <code>Class</code>.
*/
public static CDRStreamReader readerFor(Class clz)
@@ -59,6 +260,9 @@
}
else if (clz == Short.TYPE) {
return ShortReader.instance;
+ }
+ else if (clz == Void.TYPE) {
+ return null;
}
else if (clz == String.class) {
return StringReader.instance;
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development