Further rmi-impl refactoring
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
index 8a64c50..9c81bce 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java
@@ -18,6 +18,13 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+import java.io.PrintWriter;
+
class AbstractObjectDescriptor extends ValueDescriptor {
protected AbstractObjectDescriptor(Class type, TypeRepository repository) {
super(type, repository);
@@ -25,54 +32,43 @@
@Override
protected String genRepId() {
- return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
+ return String.format("IDL:%s:1.0", type.getName().replace('.', '/'));
}
/** Read an instance of this value from a CDR stream */
- public Object read(org.omg.CORBA.portable.InputStream in) {
+ @Override
+ public Object read(InputStream in) {
org.omg.CORBA_2_3.portable.InputStream _in = (org.omg.CORBA_2_3.portable.InputStream) in;
return _in.read_abstract_interface();
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object value) {
+ @Override
+ public void write(OutputStream out, Object value) {
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
_out.write_abstract_interface(value);
}
- /*
- * public java.io.Serializable writeReplace (java.io.Serializable val) {
- * return null; }
- *
- * public void writeValue(org.omg.CORBA.portable.OutputStream out,
- * java.io.Serializable value) { // skip // }
- *
- * public java.io.Serializable readValue (org.omg.CORBA.portable.InputStream
- * in, java.util.Map offsetMap) { return null; }
- */
-
- org.omg.CORBA.TypeCode getTypeCode() {
- if (_type_code == null) {
- org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
- _type_code = orb.create_abstract_interface_tc(getRepositoryID(),
- _java_class.getName());
- }
-
- return _type_code;
+ @Override
+ protected TypeCode genTypeCode() {
+ ORB orb = ORB.init();
+ return orb.create_abstract_interface_tc(getRepositoryID(), type.getName());
}
+ @Override
public long computeHashCode() {
return 0L;
}
+ @Override
Object copyObject(Object value, CopyState state) {
throw new IllegalStateException("not serializable " + value.getClass().getName());
}
- void writeMarshalValue(java.io.PrintWriter pw, String outName,
- String paramName) {
+ @Override
+ void writeMarshalValue(PrintWriter pw, String outName, String paramName) {
pw.print("javax.rmi.CORBA.Util.writeAbstractObject(");
pw.print(outName);
pw.print(',');
@@ -80,9 +76,9 @@
pw.print(')');
}
- void writeUnmarshalValue(java.io.PrintWriter pw, String inName) {
+ @Override
+ void writeUnmarshalValue(PrintWriter pw, String inName) {
pw.print(inName);
pw.print(".read_abstract_interface()");
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
index faabb00..aad6973 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java
@@ -18,6 +18,14 @@
package org.apache.yoko.rmi.impl;
+import java.io.PrintWriter;
+
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
class AnyDescriptor extends TypeDescriptor {
AnyDescriptor(Class type, TypeRepository rep) {
super(type, rep);
@@ -25,30 +33,34 @@
@Override
protected String genRepId() {
- return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
+ return String.format("IDL:%s:1.0", type.getName().replace('.', '/'));
}
/** Read an instance of this value from a CDR stream */
- public Object read(org.omg.CORBA.portable.InputStream in) {
+ @Override
+ public Object read(InputStream in) {
return javax.rmi.CORBA.Util.readAny(in);
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object val) {
+ @Override
+ public void write(OutputStream out, Object val) {
javax.rmi.CORBA.Util.writeAny(out, val);
}
- org.omg.CORBA.TypeCode getTypeCode() {
- org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
- return orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_any);
+ @Override
+ protected TypeCode genTypeCode() {
+ ORB orb = ORB.init();
+ return orb.get_primitive_tc(TCKind.tk_any);
}
+ @Override
Object copyObject(Object value, CopyState state) {
throw new InternalError("cannot copy org.omg.CORBA.Any");
}
- void writeMarshalValue(java.io.PrintWriter pw, String outName,
- String paramName) {
+ @Override
+ void writeMarshalValue(PrintWriter pw, String outName, String paramName) {
pw.print("javax.rmi.CORBA.Util.writeAny(");
pw.print(outName);
pw.print(',');
@@ -56,10 +68,10 @@
pw.print(')');
}
- void writeUnmarshalValue(java.io.PrintWriter pw, String inName) {
+ @Override
+ void writeUnmarshalValue(PrintWriter pw, String inName) {
pw.print("javax.rmi.CORBA.Util.readAny(");
pw.print(inName);
pw.print(")");
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
index 1a5f7cb..2cedbfa 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java
@@ -18,41 +18,64 @@
package org.apache.yoko.rmi.impl;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.io.Serializable;
import java.lang.reflect.Array;
+import java.rmi.Remote;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.Map;
+import java.util.Set;
import java.util.logging.Logger;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.ORB;
import org.omg.CORBA.TypeCode;
import org.omg.CORBA.ValueMember;
+import org.omg.CORBA.portable.IndirectionException;
import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
abstract class ArrayDescriptor extends ValueDescriptor {
- protected int order;
+ final Class elementType;
+ final Class basicType;
+ private final int order;
- protected Class basicType;
+ protected ArrayDescriptor(Class type, Class elemType, TypeRepository rep) {
+ super(type, rep);
+ logger.fine("Creating an array descriptor for type " + type.getName() + " holding elements of " + elemType.getName());
+ this.elementType = elemType;
- protected Class elementType;
- // repository ID for the contained elements
- private volatile String _elementRepid = null;
+ int order = 1;
+ Class basicType = elemType;
+ while (basicType.isArray()) {
+ basicType = basicType.getComponentType();
+ order++;
+ }
+ this.basicType = basicType;
+ this.order = order;
+ }
@Override
protected String genRepId() {
if (elementType.isPrimitive() || elementType == Object.class)
- return String.format("RMI:%s:%016X", _java_class.getName(), 0);
+ return String.format("RMI:%s:%016X", type.getName(), 0);
TypeDescriptor desc = repo.getDescriptor(elementType);
String elemRep = desc.getRepositoryID();
String hash = elemRep.substring(elemRep.indexOf(':', 4));
- return String.format("RMI:%s:%s", _java_class.getName(), hash);
+ return String.format("RMI:%s:%s", type.getName(), hash);
}
+ // repository ID for the contained elements
+ private volatile String _elementRepid = null;
private final String genElemRepId() {
if (elementType.isPrimitive() || elementType == Object.class) {
// use the descriptor type past the array type marker
- return String.format("RMI:%s:%016X", _java_class.getName().substring(1), 0);
+ return String.format("RMI:%s:%016X", type.getName().substring(1), 0);
}
return repo.getDescriptor(elementType).getRepositoryID();
}
@@ -62,20 +85,8 @@
return _elementRepid;
}
- protected ArrayDescriptor(Class type, Class elemType, TypeRepository rep) {
- super(type, rep);
- logger.fine("Creating an array descriptor for type " + type.getName() + " holding elements of " + elemType.getName());
- this.elementType = elemType;
-
- order = 1;
- basicType = elemType;
- while (basicType.isArray()) {
- basicType = basicType.getComponentType();
- order += 1;
- }
- }
-
- public String getIDLName() {
+ @Override
+ protected final String genIDLName() {
StringBuffer sb = new StringBuffer("org_omg_boxedRMI_");
TypeDescriptor desc = repo.getDescriptor(basicType);
@@ -112,7 +123,7 @@
}
static ArrayDescriptor get(final Class type, TypeRepository rep) {
- logger.fine("retrieving an array descriptor for class " + type.getName());
+ logger.fine("retrieving an array descriptor for class " + type.getName());
if (!type.isArray()) {
throw new IllegalArgumentException("type is not an array");
}
@@ -120,7 +131,6 @@
Class elemType = type.getComponentType();
if (elemType.isPrimitive()) {
-
if (elemType == Boolean.TYPE) {
return new BooleanArrayDescriptor(type, elemType, rep);
} else if (elemType == Byte.TYPE) {
@@ -141,53 +151,51 @@
throw new RuntimeException("unknown array type " + type);
}
}
- if (java.io.Serializable.class.equals(elemType) ||
- java.io.Externalizable.class.equals(elemType) || Object.class.equals(elemType)) {
+ if (Serializable.class.equals(elemType) ||
+ Externalizable.class.equals(elemType) || Object.class.equals(elemType)) {
return new ObjectArrayDescriptor(type, elemType, rep);
-
- } else if (java.io.Serializable.class.isAssignableFrom(elemType)) {
- return new ValueArrayDescriptor(type, elemType, rep);
-
- } else if (java.rmi.Remote.class.isAssignableFrom(elemType)) {
+ } else if (Remote.class.isAssignableFrom(elemType)) {
return new RemoteArrayDescriptor(type, elemType, rep);
-
+ } else if (Serializable.class.isAssignableFrom(elemType)) {
+ return new ValueArrayDescriptor(type, elemType, rep);
} else {
return new AbstractObjectArrayDescriptor(type, elemType, rep);
}
-
}
/**
* Read an instance of this value from a CDR stream. Overridden to provide a
* specific type
*/
- public Object read(org.omg.CORBA.portable.InputStream in) {
+ @Override
+ public Object read(InputStream in) {
org.omg.CORBA_2_3.portable.InputStream _in = (org.omg.CORBA_2_3.portable.InputStream) in;
- logger.fine("Reading an array value with repository id " + getRepositoryID() + " java class is " + _java_class);
-
- // if we have a resolved class, read using that, otherwise fall back on the
- // repository id.
- return ((null == _java_class) ? _in.read_value(getRepositoryID()) : _in.read_value(_java_class));
+ logger.fine("Reading an array value with repository id " + getRepositoryID() + " java class is " + type);
+
+ // if we have a resolved class, read using that, otherwise fall back on the
+ // repository id.
+ return ((null == type) ? _in.read_value(getRepositoryID()) : _in.read_value(type));
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object value) {
+ @Override
+ public void write(OutputStream out, Object value) {
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
- _out.write_value((java.io.Serializable)value, getRepositoryID());
+ _out.write_value((Serializable)value, getRepositoryID());
}
- org.omg.CORBA.ValueMember[] getValueMembers() {
+ ValueMember[] getValueMembers() {
if (_value_members == null) {
- _value_members = new org.omg.CORBA.ValueMember[1];
+ _value_members = new ValueMember[1];
TypeDescriptor elemDesc = repo.getDescriptor(elementType);
String elemRepID = elemDesc.getRepositoryID();
- ORB orb = org.omg.CORBA.ORB.init();
+ ORB orb = ORB.init();
TypeCode memberTC = orb.create_sequence_tc(0, elemDesc
.getTypeCode());
@@ -200,10 +208,23 @@
return _value_members;
}
- void addDependencies(java.util.Set classes) {
+ @Override
+ void addDependencies(Set classes) {
repo.getDescriptor(basicType).addDependencies(classes);
}
+ final CorbaObjectReader makeCorbaObjectReader(final InputStream in, final Map offsetMap, final Serializable obj)
+ throws IOException {
+ try {
+ return AccessController.doPrivileged(new PrivilegedExceptionAction<CorbaObjectReader>() {
+ public CorbaObjectReader run() throws IOException {
+ return new CorbaObjectReader(in, offsetMap, obj);
+ }
+ });
+ } catch (PrivilegedActionException e) {
+ throw (IOException)e.getException();
+ }
+ }
}
class ObjectArrayDescriptor extends ArrayDescriptor {
@@ -213,15 +234,15 @@
super(type, elemType, rep);
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out, Serializable value) {
// System.out.println ("ObjectArrayDescriptor::writeValue
// "+getRepositoryID ());
Object[] arr = (Object[]) value;
out.write_long(arr.length);
- logger.finer("writing " + _java_class.getName() + " size="
+ logger.finer("writing " + type.getName() + " size="
+ arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -229,8 +250,9 @@
}
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
try {
ObjectReader reader = makeCorbaObjectReader(in, offsetMap, null);
@@ -240,7 +262,7 @@
offsetMap.put(key, arr);
- logger.fine("reading " + _java_class.getName() + " size="
+ logger.fine("reading " + type.getName() + " size="
+ arr.length);
for (int i = 0; i < length; i++) {
@@ -252,19 +274,20 @@
else {
logger.finer("Array item " + i + " is null");
}
- } catch (org.omg.CORBA.portable.IndirectionException ex) {
+ } catch (IndirectionException ex) {
arr[i] = offsetMap.get(new Integer(ex.offset));
// reader.addValueBox (ex.offset, new ArrayBox (i, arr));
}
}
- return (java.io.Serializable) arr;
+ return arr;
- } catch (java.io.IOException ex) {
+ } catch (IOException ex) {
throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
final Object[] orig = (Object[]) value;
final Object[] result = new Object[orig.length];
@@ -287,7 +310,8 @@
return result;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
Object[] arr = (Object[]) val;
TypeDescriptor desc = repo.getDescriptor(elementType);
pw.print("length=" + arr.length + "; ");
@@ -306,11 +330,9 @@
super(type, elemType, rep);
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
- // System.out.println ("RemoteArrayDescriptor::writeValue
- // "+getRepositoryID ());
-
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
Object[] arr = (Object[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -318,8 +340,9 @@
}
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
try {
ObjectReader reader = makeCorbaObjectReader(in, offsetMap, null);
@@ -331,20 +354,21 @@
for (int i = 0; i < length; i++) {
try {
arr[i] = reader.readRemoteObject(elementType);
- } catch (org.omg.CORBA.portable.IndirectionException ex) {
+ } catch (IndirectionException ex) {
arr[i] = offsetMap.get(new Integer(ex.offset));
// reader.addValueBox (ex.offset, new ArrayBox (i, arr));
}
}
- return (java.io.Serializable) arr;
+ return arr;
- } catch (java.io.IOException ex) {
+ } catch (IOException ex) {
throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
final Object[] orig = (Object[]) value;
final Object[] result = (Object[]) Array.newInstance(elementType,
@@ -368,7 +392,8 @@
return result;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
Object[] arr = (Object[]) val;
TypeDescriptor desc = repo.getDescriptor(elementType);
pw.print("length=" + arr.length + "; ");
@@ -387,19 +412,19 @@
super(type, elemType, rep);
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
- // System.out.println ("ValueArrayDescriptor::writeValue
- // "+getRepositoryID ());
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
Object[] arr = (Object[]) value;
out.write_long(arr.length);
- java.io.Serializable[] sarr = (java.io.Serializable[]) arr;
+ Serializable[] sarr = (Serializable[]) arr;
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
for (int i = 0; i < sarr.length; i++) {
_out.write_value(sarr[i], getElementRepositoryID());
}
}
+ @Override
public Serializable readValue(InputStream in, Map offsetMap, Integer key) {
final int length = in.read_long();
Object[] arr = (Object[]) Array.newInstance(elementType, length);
@@ -409,7 +434,7 @@
for (int i = 0; i < length; i++) {
try {
arr[i] = _in.read_value(elementType);
- } catch (org.omg.CORBA.portable.IndirectionException ex) {
+ } catch (IndirectionException ex) {
arr[i] = offsetMap.get(new Integer(ex.offset));
}
}
@@ -417,6 +442,7 @@
return arr;
}
+ @Override
Object copyObject(Object value, CopyState state) {
Object[] orig = (Object[]) value;
final Object[] result = (Object[]) Array.newInstance(value.getClass()
@@ -440,7 +466,8 @@
return result;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
Object[] arr = (Object[]) val;
TypeDescriptor desc = repo.getDescriptor(elementType);
pw.print("length=" + arr.length + "; ");
@@ -459,10 +486,9 @@
super(type, elemType, rep);
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
- // System.out.println ("AbstractObjectArrayDescriptor::writeValue
- // "+getRepositoryID ());
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
Object[] arr = (Object[]) value;
out.write_long(arr.length);
@@ -471,8 +497,9 @@
}
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
try {
ObjectReader reader = makeCorbaObjectReader(in, offsetMap, null);
@@ -485,19 +512,20 @@
for (int i = 0; i < length; i++) {
try {
arr[i] = reader.readAbstractObject();
- } catch (org.omg.CORBA.portable.IndirectionException ex) {
+ } catch (IndirectionException ex) {
arr[i] = offsetMap.get(new Integer(ex.offset));
// reader.addValueBox (ex.offset, new ArrayBox (i, arr));
}
}
- return (java.io.Serializable) arr;
+ return arr;
- } catch (java.io.IOException ex) {
+ } catch (IOException ex) {
throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
final Object[] orig = (Object[]) value;
final Object[] result = (Object[]) Array.newInstance(elementType,
@@ -521,7 +549,8 @@
return result;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
Object[] arr = (Object[]) val;
TypeDescriptor desc = repo.getDescriptor(elementType);
pw.print("length=" + arr.length + "; ");
@@ -540,19 +569,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
boolean[] arr = new boolean[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_boolean();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
boolean[] arr = (boolean[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -560,6 +591,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((boolean[]) value).length == 0)
return value;
@@ -569,7 +601,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
boolean[] arr = (boolean[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -583,34 +616,32 @@
}
class ByteArrayDescriptor extends ArrayDescriptor {
-
ByteArrayDescriptor(Class type, Class elemType, TypeRepository rep) {
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
byte[] arr = new byte[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_octet();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
byte[] arr = (byte[]) value;
out.write_long(arr.length);
out.write_octet_array(arr, 0, arr.length);
-
- // for (int i = 0; i < arr.length; i++) {
- // out.write_octet(arr[i]);
- // }
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((byte[]) value).length == 0)
return value;
@@ -620,7 +651,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
byte[] arr = (byte[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -637,23 +669,26 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
int len = in.read_long();
char[] arr = new char[len];
offsetMap.put(key, arr);
in.read_wchar_array(arr, 0, len);
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
char[] arr = (char[]) value;
out.write_long(arr.length);
out.write_wchar_array(arr, 0, arr.length);
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((char[]) value).length == 0)
return value;
@@ -663,7 +698,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
char[] arr = (char[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -680,19 +716,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
short[] arr = new short[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_short();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
short[] arr = (short[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -700,6 +738,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((short[]) value).length == 0)
return value;
@@ -709,7 +748,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
short[] arr = (short[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -726,19 +766,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
int[] arr = new int[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_long();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
int[] arr = (int[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -746,6 +788,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((int[]) value).length == 0)
return value;
@@ -755,7 +798,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
int[] arr = (int[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -772,19 +816,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
long[] arr = new long[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_longlong();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
long[] arr = (long[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -792,6 +838,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((long[]) value).length == 0)
return value;
@@ -801,7 +848,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
long[] arr = (long[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -819,19 +867,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
float[] arr = new float[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_float();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
float[] arr = (float[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -839,6 +889,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((float[]) value).length == 0)
return value;
@@ -848,7 +899,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
float[] arr = (float[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
@@ -865,19 +917,21 @@
super(type, elemType, rep);
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.util.Map offsetMap,
+ @Override
+ public Serializable readValue(
+ InputStream in, Map offsetMap,
Integer key) {
double[] arr = new double[in.read_long()];
offsetMap.put(key, arr);
for (int i = 0; i < arr.length; i++) {
arr[i] = in.read_double();
}
- return (java.io.Serializable) arr;
+ return arr;
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
+ @Override
+ public void writeValue(OutputStream out,
+ Serializable value) {
double[] arr = (double[]) value;
out.write_long(arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -885,6 +939,7 @@
}
}
+ @Override
Object copyObject(Object value, CopyState state) {
if (((double[]) value).length == 0)
return value;
@@ -894,7 +949,8 @@
return copy;
}
- void printFields(java.io.PrintWriter pw, java.util.Map recurse, Object val) {
+ @Override
+ void printFields(PrintWriter pw, Map recurse, Object val) {
double[] arr = (double[]) val;
pw.print("length=" + arr.length + "; ");
for (int i = 0; i < arr.length; i++) {
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassBaseDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassBaseDescriptor.java
index debb1ec..708faea 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassBaseDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassBaseDescriptor.java
@@ -1,41 +1,47 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.MARSHAL;
+
+import javax.rmi.CORBA.ClassDesc;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import javax.rmi.CORBA.ClassDesc;
-
-import org.omg.CORBA.MARSHAL;
-
abstract class ClassBaseDescriptor extends ValueDescriptor {
ClassBaseDescriptor(Class type, TypeRepository repository) {
super(type, repository);
}
- @Override
- public void init() {
- super.init();
+ private volatile Field repidField = null;
+ private Field genRepIdField() {
+ return findField("repid");
+ }
+ final Field getRepidField() {
+ if (null == repidField) repidField = genRepIdField();
+ return repidField;
+ }
- final Class<?> clz = ClassDesc.class;
+ private volatile Field cobebaseField = null;
+ private Field genCodebaseField() {
+ return findField("codebase");
+ }
+ final Field getCobebaseField() {
+ if (null == cobebaseField) cobebaseField = genCodebaseField();
+ return cobebaseField;
+ }
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- @Override
- public Void run() {
+ private Field findField(final String fieldName) {
+ return AccessController.doPrivileged(new PrivilegedAction<Field>() {
+ public Field run() {
try {
- final Field repid_field = clz.getDeclaredField("repid");
- repid_field.setAccessible(true);
- final Field codebase_field = clz.getDeclaredField("codebase");
- codebase_field.setAccessible(true);
- init(repid_field, codebase_field);
- } catch (NoSuchFieldException ex) {
- throw (MARSHAL)new MARSHAL("no such field: " + ex).initCause(ex);
+ Field f = ClassDesc.class.getDeclaredField(fieldName);
+ f.setAccessible(true);
+ return f;
+ } catch (NoSuchFieldException e) {
+ throw (MARSHAL)new MARSHAL("no such field: " + e).initCause(e);
}
- return null;
}
});
}
-
- abstract void init(Field repid_field, Field codebase_field);
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
index 1a93939..8106755 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescDescriptor.java
@@ -16,19 +16,10 @@
class ClassDescDescriptor extends ClassBaseDescriptor {
private static final Logger logger = Logger.getLogger(ClassDescDescriptor.class.getName());
- private Field repid_field;
- private Field codebase_field;
-
ClassDescDescriptor(TypeRepository repository) {
super(ClassDesc.class, repository);
}
- @Override
- void init(Field repid_field, Field codebase_field) {
- this.repid_field = repid_field;
- this.codebase_field = codebase_field;
- }
-
/** Read an instance of this value from a CDR stream */
@Override
public Serializable readResolve(final Serializable value) {
@@ -38,8 +29,8 @@
public Class<?> run() {
String className = "<unknown>";
try {
- String repid = (String) repid_field.get(desc);
- String codebase = (String) codebase_field.get(desc);
+ String repid = (String) getRepidField().get(desc);
+ String codebase = (String) getCobebaseField().get(desc);
Class<?> result = RepIds.query(repid).codebase(codebase).toClass();
if (null != result) return result;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
index d296aed..6389139 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ClassDescriptor.java
@@ -34,20 +34,11 @@
class ClassDescriptor extends ClassBaseDescriptor {
private static final Logger logger = Logger.getLogger(ClassDescriptor.class.getName());
- private Field repid_field;
- private Field codebase_field;
-
ClassDescriptor(TypeRepository repository) {
super(Class.class, repository);
}
@Override
- void init(Field repid_field, Field codebase_field) {
- this.repid_field = repid_field;
- this.codebase_field = codebase_field;
- }
-
- @Override
Object copyObject(Object orig, CopyState state) {
state.put(orig, orig);
return orig;
@@ -66,10 +57,10 @@
ValueHandler handler = Util.createValueHandler();
String repId = handler.getRMIRepositoryID(type);
- repid_field.set(desc, repId);
+ getRepidField().set(desc, repId);
String codebase = Util.getCodebase(type);
- codebase_field.set(desc, codebase);
+ getCobebaseField().set(desc, codebase);
return desc;
@@ -84,5 +75,4 @@
return result;
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
index bfc500c..562312e 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DateValueDescriptor.java
@@ -43,5 +43,4 @@
state.put(orig, result);
return result;
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
index 44e692c..84478ca 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumDescriptor.java
@@ -19,11 +19,9 @@
package org.apache.yoko.rmi.impl;
import org.apache.yoko.util.yasf.Yasf;
-import org.apache.yoko.util.yasf.YasfThreadLocal;
import java.io.IOException;
import java.io.Serializable;
-import java.util.Set;
class EnumDescriptor extends ValueDescriptor {
public EnumDescriptor(Class<?> type, TypeRepository repo) {
@@ -58,7 +56,6 @@
@Override
protected void defaultWriteValue(ObjectWriter writer, Serializable val) throws IOException {
- checkInit();
if ((writer.yasfSet != null) && !!!writer.yasfSet.contains(Yasf.ENUM_FIXED)) {
// talking to an old yoko that expects an ordinal field to be written;
ordinalField.write(writer, val);
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
index 12c34c6..9ba2f4b 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java
@@ -18,14 +18,13 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.portable.IndirectionException;
+import org.omg.CORBA.portable.InputStream;
+
import java.io.IOException;
import java.io.Serializable;
import java.util.Map;
-import org.apache.yoko.rmi.util.StringUtil;
-import org.omg.CORBA.portable.IndirectionException;
-import org.omg.CORBA.portable.InputStream;
-
class EnumSubclassDescriptor extends ValueDescriptor {
@SuppressWarnings("rawtypes")
private final Class enumType;
@@ -42,12 +41,6 @@
}
@Override
- public final void init() {
- super.init();
- // Avoid doing anything that would cause the calculated classHash to change
- }
-
- @Override
protected final long getSerialVersionUID() {
return 0L;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
index 166a202..691a566 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ExceptionDescriptor.java
@@ -26,7 +26,7 @@
private volatile String ex_repid = null;
private String genExceptionRepId() {
- String name = _java_class.getName();
+ String name = type.getName();
final String encname;
if (name.endsWith("Exception")) {
@@ -38,7 +38,7 @@
return String.format("IDL:%s:1.0", encname.replace('.', '/'));
}
- public final String getExceptionRepositoryID() {
+ final String getExceptionRepositoryID() {
if (ex_repid == null) ex_repid = genExceptionRepId();
return ex_repid;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
index 9c7de4f..f6e42dc 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java
@@ -46,7 +46,7 @@
}
@Override
- TypeCode getTypeCode() {
+ protected TypeCode genTypeCode() {
return fvd.type;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
index 9d8f2c3..5b07d69 100644
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumSubclassDescriptor.java
@@ -48,7 +48,7 @@
}
@Override
- TypeCode getTypeCode() {
+ protected final TypeCode genTypeCode() {
return fvd.type;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
index ad379af..1b353be 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDValueDescriptor.java
@@ -18,16 +18,15 @@
package org.apache.yoko.rmi.impl;
import org.omg.CORBA.TypeCode;
-import org.omg.CORBA.ValueMember;
import org.omg.CORBA.ValueDefPackage.FullValueDescription;
+import org.omg.CORBA.ValueMember;
/**
* @author krab
*/
class FVDValueDescriptor extends ValueDescriptor {
- FullValueDescription fvd;
-
- String repid;
+ final FullValueDescription fvd;
+ final String repid;
FVDValueDescriptor(FullValueDescription fvd, Class clazz,
TypeRepository rep, String repid, ValueDescriptor super_desc) {
@@ -61,10 +60,10 @@
_fields = new_fields;
}
- FieldDescriptor findField(ValueMember valueMember) {
+ private FieldDescriptor findField(ValueMember valueMember) {
FieldDescriptor result = null;
- for (Class c = _java_class; c != null; c = c.getSuperclass()) {
+ for (Class c = type; c != null; c = c.getSuperclass()) {
TypeDescriptor td = repo.getDescriptor(c);
if (td instanceof ValueDescriptor) {
ValueDescriptor vd = (ValueDescriptor) td;
@@ -90,26 +89,18 @@
return repid;
}
+ @Override
org.omg.CORBA.ValueDefPackage.FullValueDescription getFullValueDescription() {
return fvd;
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.yoko.rmi.impl.TypeDescriptor#getTypeCode()
- */
- public TypeCode getTypeCode() {
+ @Override
+ protected final TypeCode genTypeCode() {
return fvd.type;
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.yoko.rmi.impl.TypeDescriptor#isCustomMarshalled()
- */
+ @Override
public boolean isCustomMarshalled() {
return fvd.is_custom;
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
index 11dc546..c7949fe 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/IDLEntityDescriptor.java
@@ -18,111 +18,83 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.MARSHAL;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.ObjectImpl;
+import org.omg.CORBA.portable.OutputStream;
+
+import javax.rmi.CORBA.Util;
+import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-
-import org.omg.CORBA.MARSHAL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Map;
class IDLEntityDescriptor extends ValueDescriptor {
- Method _read_method;
-
- Method _write_method;
-
- Method _type_method;
-
- boolean isAbstract = false;
-
- boolean isCorba = false;
+ private final boolean isCorba;
+ private final Class helperType;
IDLEntityDescriptor(Class type, TypeRepository repository) {
super(type, repository);
- if (org.omg.CORBA.Object.class.isAssignableFrom(type)) {
- isCorba = true;
+ isCorba = org.omg.CORBA.Object.class.isAssignableFrom(type);
+ try {
+ final String helperName = type.getName() + "Helper";
+ helperType = Util.loadClass(helperName, null, type.getClassLoader());
+ } catch (ClassNotFoundException ex) {
+ throw new RuntimeException("cannot load IDL Helper class for "
+ + type, ex);
}
}
- public String getIDLName() {
- return "org_omg_boxedIDL_" + super.getIDLName();
- }
-
@Override
- public void init() {
- super.init();
-
- try {
- final Class type = _java_class;
- final String helperName = type.getName() + "Helper";
- final Class helperClass = javax.rmi.CORBA.Util.loadClass(
- helperName, null, type.getClassLoader());
-
- java.security.AccessController
- .doPrivileged(new java.security.PrivilegedAction() {
- public Object run() {
-
- try {
- Method _id_method = null;
- Method[] methods = helperClass
- .getDeclaredMethods();
- for (int i = 0; i < methods.length; i++) {
- String name = methods[i].getName();
-
- if (name.equals("id"))
- _id_method = methods[i];
-
- else if (name.equals("read"))
- _read_method = methods[i];
-
- else if (name.equals("write"))
- _write_method = methods[i];
-
- else if (name.equals("type"))
- _type_method = methods[i];
- }
-
- // _repid = (String)
- _id_method.invoke(null, new Object[0]);
-
- } catch (InvocationTargetException ex) {
- throw new RuntimeException(
- "cannot initialize: " + ex.getCause(), ex.getCause());
-
- } catch (IllegalAccessException ex) {
- throw new RuntimeException(
- "cannot initialize: " + ex, ex);
- }
-
- return null;
- }
- });
-
- } catch (ClassNotFoundException ex) {
- throw new RuntimeException("cannot load IDL Helper class for "
- + _java_class, ex);
- }
- }
-
- @Deprecated
- public void initIDL() {
- init();
+ protected final String genIDLName() {
+ return "org_omg_boxedIDL_" + super.genIDLName();
}
- /*
- * public String getRepositoryID () { return _repid; }
- */
+ private volatile Method readMethod = null;
+ private Method getReadMethod() {
+ if (null == readMethod) readMethod = genHelperMethod("write");
+ return readMethod;
+ }
+
+ private volatile Method writeMethod = null;
+ private Method getWriteMethod() {
+ if (null == writeMethod) writeMethod = genHelperMethod("write");
+ return writeMethod;
+ }
+
+ private volatile Method typeMethod = null;
+ private Method getTypeMethod() {
+ if (null == typeMethod) typeMethod = genHelperMethod("type");
+ return typeMethod;
+ }
+
+ private Method genHelperMethod(final String name) {
+ return AccessController.doPrivileged(new PrivilegedAction<Method>() {
+ @Override
+ public Method run() {
+ for (Method m: helperType.getDeclaredMethods()) {
+ if (m.getName().equals(name)) return m;
+ }
+ throw new RuntimeException("Unable to find " + name + " method for " + helperType.getName());
+ }
+ });
+ }
/** Read an instance of this value from a CDR stream */
- public Object read(org.omg.CORBA.portable.InputStream in) {
+ @Override
+ public Object read(InputStream in) {
org.omg.CORBA_2_3.portable.InputStream _in = (org.omg.CORBA_2_3.portable.InputStream) in;
// there are two ways we need to deal with IDLEntity classes. Ones that also implement
// the CORBA Object interface are actual corba objects, and must be handled that way.
// Other IDLEntity classes are just transmitted by value.
if (isCorba) {
- return _in.read_Object(_java_class);
- }
- else {
-
+ return _in.read_Object(type);
+ } else {
// we directly call read_value() on the stream here, with the explicitly specified
// repository ID. The input stream will handle validating the value tag for us, and eventually
// will call our readValue() method to deserialize the object.
@@ -130,80 +102,57 @@
}
}
- public java.io.Serializable readValue(
- final org.omg.CORBA.portable.InputStream in,
- final java.util.Map offsetMap, final java.lang.Integer offset) {
- final java.io.Serializable value = (java.io.Serializable) readValue(in);
-
- offsetMap.put(offset, value);
-
- return value;
- }
-
- public Object readValue(org.omg.CORBA.portable.InputStream in) {
- if (isAbstract) {
- throw new MARSHAL("IDL Entity " + _java_class.getName()
- + " is abstract");
- }
-
+ @Override
+ public Serializable readValue(final InputStream in, final Map offsetMap, final Integer offset) {
try {
- return _read_method.invoke(null, new Object[] { in });
+ Serializable value = (Serializable) getReadMethod().invoke(null, new Object[]{in});
+ offsetMap.put(offset, value);
+ return value;
} catch (InvocationTargetException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(""+ex.getCause()).initCause(ex.getCause());
+ throw (MARSHAL)new MARSHAL(""+ex.getCause()).initCause(ex.getCause());
} catch (IllegalAccessException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(ex.getMessage()).initCause(ex);
+ throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object val) {
+ @Override
+ public void write(OutputStream out, Object val) {
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
// there are two ways we need to deal with IDLEntity classes. Ones that also implement
// the CORBA Object interface are actual corba objects, and must be handled that way.
// Other IDLEntity classes are just transmitted by value.
- if (val instanceof org.omg.CORBA.portable.ObjectImpl) {
+ if (val instanceof ObjectImpl) {
_out.write_Object((org.omg.CORBA.Object)val);
- }
- else {
+ } else {
// we directly call write_value() on the stream here, with the explicitly specified
// repository ID. the output stream will handle writing the value tag for us, and eventually
// will call our writeValue() method to serialize the object.
- _out.write_value((java.io.Serializable)val, getRepositoryID());
+ _out.write_value((Serializable)val, getRepositoryID());
}
-
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out, java.io.Serializable val) {
- if (isAbstract) {
- throw new MARSHAL("IDL Entity " + _java_class.getName()
- + " is abstract");
- }
-
+ @Override
+ public void writeValue(OutputStream out, Serializable val) {
try {
- _write_method.invoke(null, new Object[] { out, val });
+ getWriteMethod().invoke(null, new Object[] { out, val });
} catch (InvocationTargetException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(""+ ex.getCause()).initCause(ex.getCause());
+ throw (MARSHAL)new MARSHAL(""+ ex.getCause()).initCause(ex.getCause());
} catch (IllegalAccessException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(ex.getMessage()).initCause(ex);
+ throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
}
- org.omg.CORBA.TypeCode getTypeCode() {
- if (_type_code == null) {
-
- try {
- _type_code = (org.omg.CORBA.TypeCode) _type_method.invoke(null,
- new Object[0]);
- } catch (InvocationTargetException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(""+ex.getCause()).initCause(ex.getCause());
- } catch (IllegalAccessException ex) {
- throw (org.omg.CORBA.MARSHAL)new org.omg.CORBA.MARSHAL(ex.getMessage()).initCause(ex);
- }
+ @Override
+ protected TypeCode genTypeCode() {
+ try {
+ return (TypeCode) getTypeMethod().invoke(null, new Object[0]);
+ } catch (InvocationTargetException ex) {
+ throw (MARSHAL)new MARSHAL(""+ex.getCause()).initCause(ex.getCause());
+ } catch (IllegalAccessException ex) {
+ throw (MARSHAL)new MARSHAL(ex.getMessage()).initCause(ex);
}
-
- return _type_code;
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
index 16f1a51..81a049b 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/MethodDescriptor.java
@@ -33,7 +33,7 @@
static final Logger logger = Logger.getLogger(MethodDescriptor.class.getName());
/** The refleced method object for this method */
- java.lang.reflect.Method reflected_method;
+ final java.lang.reflect.Method reflected_method;
java.lang.Object invocation_block_selector;
@@ -226,7 +226,7 @@
public org.omg.CORBA.portable.OutputStream writeException(
org.omg.CORBA.portable.ResponseHandler response, Throwable ex) {
for (int i = 0; i < exception_types.length; i++) {
- if (exception_types[i]._java_class.isInstance(ex)) {
+ if (exception_types[i].type.isInstance(ex)) {
org.omg.CORBA.portable.OutputStream out = response
.createExceptionReply();
org.omg.CORBA_2_3.portable.OutputStream out2 = (org.omg.CORBA_2_3.portable.OutputStream) out;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
index a3fd62e..3f37c7b 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ModelElement.java
@@ -21,26 +21,18 @@
abstract class ModelElement {
final TypeRepository repo;
final String java_name; // the java name of the type
- private String idl_name; // fully resolved package name
- private volatile boolean notInit = true;
-
protected ModelElement(TypeRepository repo, String java_name) {
this.repo = repo;
this.java_name = java_name;
}
protected void init() {
- idl_name = genIDLName();
- notInit = false;
}
+ private volatile String idlName = null; // fully resolved package name
protected abstract String genIDLName();
-
- final void checkInit() {
- if (notInit) throw new IllegalStateException("Not initialized: " + java_name);
- }
- public String getIDLName() {
- checkInit();
- return idl_name;
+ public final String getIDLName() {
+ if (null == idlName) idlName = genIDLName();
+ return idlName;
}
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/PortableRemoteObjectImpl.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/PortableRemoteObjectImpl.java
index 7de9c1a..e7ae51d 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/PortableRemoteObjectImpl.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/PortableRemoteObjectImpl.java
@@ -299,7 +299,7 @@
}
TypeRepository repository = state.getTypeRepository();
- RemoteDescriptor desc = (RemoteDescriptor) repository.getRemoteDescriptor(type);
+ RemoteDescriptor desc = (RemoteDescriptor) repository.getRemoteInterface(type);
MethodDescriptor[] mdesc = desc.getMethods();
MethodDescriptor[] descriptors = new MethodDescriptor[mdesc.length + 1];
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIServant.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIServant.java
index e70afe6..7653afd 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIServant.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIServant.java
@@ -39,7 +39,7 @@
byte[] _id;
Class getJavaClass() {
- return _descriptor._java_class;
+ return _descriptor.type;
}
RMIState getRMIState() {
@@ -178,7 +178,7 @@
throw new IllegalArgumentException();
}
- _descriptor = _state.getTypeRepository().getRemoteDescriptor(target.getClass()).getRemoteInterface();
+ _descriptor = _state.getTypeRepository().getRemoteInterface(target.getClass()).getRemoteInterface();
if (_descriptor == null) {
throw new RuntimeException("remote classes not supported");
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStub.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStub.java
index e700e06..db41e66 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStub.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStub.java
@@ -19,7 +19,6 @@
package org.apache.yoko.rmi.impl;
import org.apache.yoko.rmi.api.PortableRemoteObjectExt;
-import org.omg.CORBA.ORB;
import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.Delegate;
import org.omg.CORBA.portable.ServantObject;
@@ -40,7 +39,7 @@
Class remote_interface = getClass().getInterfaces()[0];
RMIState state = (RMIState) PortableRemoteObjectExt.getState();
- Object o = state.getTypeRepository().getRemoteDescriptor(
+ Object o = state.getTypeRepository().getRemoteInterface(
remote_interface);
_descriptor = (RemoteDescriptor) o;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
index 4cd36cc..231981c 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubDescriptor.java
@@ -18,6 +18,8 @@
package org.apache.yoko.rmi.impl;
+import java.io.IOException;
+
class RMIStubDescriptor extends ValueDescriptor {
RMIStubDescriptor(Class type, TypeRepository repository) {
super(type, repository);
@@ -25,7 +27,7 @@
@Override
protected String genRepId() {
- final Class[] ifaces = _java_class.getInterfaces();
+ final Class[] ifaces = type.getInterfaces();
if (ifaces.length != 2 || ifaces[1] != org.apache.yoko.rmi.util.stub.Stub.class) {
throw new RuntimeException("Unexpected RMIStub structure");
}
@@ -41,14 +43,15 @@
// state is written. This ensures that fields in the proxy are
// not included on the wire.
//
+ @Override
protected void writeValue(ObjectWriter writer, java.io.Serializable val)
- throws java.io.IOException {
+ throws IOException {
_super_descriptor.writeValue(writer, val);
}
+ @Override
protected void readValue(ObjectReader reader, java.io.Serializable value)
- throws java.io.IOException {
+ throws IOException {
_super_descriptor.readValue(reader, value);
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubHandler.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubHandler.java
index d0855be..07bb558 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubHandler.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIStubHandler.java
@@ -42,7 +42,7 @@
static final RMIStubHandler instance = new RMIStubHandler();
public Object stubWriteReplace(RMIStub stub) {
- Class type = stub._descriptor._java_class;
+ Class type = stub._descriptor.type;
return new org.apache.yoko.rmi.impl.RMIPersistentStub(stub, type);
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
index c660417..4eb3ea3 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteClassDescriptor.java
@@ -18,14 +18,26 @@
package org.apache.yoko.rmi.impl;
-class RemoteClassDescriptor extends RemoteDescriptor {
+final class RemoteClassDescriptor extends RemoteDescriptor {
@Override
protected String genRepId() {
- return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
+ return String.format("IDL:%s:1.0", type.getName().replace('.', '/'));
}
RemoteClassDescriptor(Class type, TypeRepository repository) {
super(type, repository);
}
+
+ @Override
+ protected RemoteInterfaceDescriptor genRemoteInterface() {
+ Class[] remotes = collect_remote_interfaces(type);
+ if (remotes.length == 0) {
+ throw new RuntimeException(type.getName()
+ + " has no remote interfaces");
+ }
+ Class most_specific_interface = remotes[0];
+
+ return repo.getDescriptor(most_specific_interface).getRemoteInterface();
+ }
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
index 5e91b4b..1c8b726 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteDescriptor.java
@@ -18,9 +18,19 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+import java.io.IOException;
+import java.io.PrintWriter;
import java.lang.reflect.Method;
+import java.rmi.Remote;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
@@ -45,31 +55,10 @@
protected List super_descriptors;
- public RemoteInterfaceDescriptor getRemoteInterface() {
- RemoteInterfaceDescriptor result = super.getRemoteInterface();
- if (result != null) {
- return result;
- }
+ @Override
+ protected abstract RemoteInterfaceDescriptor genRemoteInterface();
- if (this instanceof RemoteInterfaceDescriptor) {
- result = (RemoteInterfaceDescriptor) this;
- } else {
- Class[] remotes = collect_remote_interfaces(_java_class);
- if (remotes.length == 0) {
- throw new RuntimeException(_java_class.getName()
- + " has no remote interfaces");
- }
- Class most_specific_interface = remotes[0];
-
- result = (RemoteInterfaceDescriptor)repo.getDescriptor(most_specific_interface);
- }
-
- setRemoteInterface(result);
-
- return result;
- }
-
- static final Class REMOTE_CLASS = java.rmi.Remote.class;
+ static final Class REMOTE_CLASS = Remote.class;
static final Class OBJECT_CLASS = java.lang.Object.class;
@@ -79,7 +68,7 @@
public String[] all_interfaces() {
if (_ids == null) {
- Class[] ifaces = collect_remote_interfaces(_java_class);
+ Class[] ifaces = collect_remote_interfaces(type);
int len = ifaces.length;
String[] ids = new String[len];
for (int i = 0; i < len; i++) {
@@ -99,7 +88,7 @@
}
if (method_map == null) {
- method_map = new java.util.HashMap();
+ method_map = new HashMap();
for (int i = 0; i < operations.length; i++) {
method_map.put(operations[i].getIDLName(), operations[i]);
}
@@ -110,7 +99,7 @@
void debugMethodMap() {
if (logger.isLoggable(Level.FINER)) {
- logger.finer("METHOD MAP FOR " + _java_class.getName());
+ logger.finer("METHOD MAP FOR " + type.getName());
Iterator it = method_map.keySet().iterator();
while (it.hasNext()) {
@@ -127,7 +116,7 @@
}
if (refl_method_map == null) {
- refl_method_map = new java.util.HashMap();
+ refl_method_map = new HashMap();
for (int i = 0; i < operations.length; i++) {
refl_method_map.put(operations[i].getReflectedMethod(), operations[i]);
}
@@ -165,7 +154,7 @@
ArrayList method_list = new ArrayList();
// first step is to build the helpers for any super classes
- Class[] supers = _java_class.getInterfaces();
+ Class[] supers = type.getInterfaces();
super_descriptors = new ArrayList();
Map all_methods = new HashMap();
@@ -234,7 +223,7 @@
}
// init method map...
- method_map = new java.util.HashMap();
+ method_map = new HashMap();
for (int i = 0; i < method_list.size(); i++) {
MethodDescriptor desc = (MethodDescriptor) method_list.get(i);
logger.finer("Adding method " + desc.java_name + " to method map under " + desc.getIDLName());
@@ -266,7 +255,7 @@
Method[] getLocalMethods() {
ArrayList result = new ArrayList();
- addNonRemoteInterfaceMethods(_java_class, result);
+ addNonRemoteInterfaceMethods(type, result);
Method[] out = new Method[result.size()];
result.toArray(out);
@@ -391,27 +380,26 @@
}
/** Read an instance of this value from a CDR stream */
- public Object read(org.omg.CORBA.portable.InputStream in) {
- return javax.rmi.PortableRemoteObject.narrow(in.read_Object(),
- _java_class);
+ @Override
+ public Object read(InputStream in) {
+ return PortableRemoteObject.narrow(in.read_Object(),
+ type);
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object val) {
+ @Override
+ public void write(OutputStream out, Object val) {
javax.rmi.CORBA.Util.writeRemoteObject(out, val);
}
- org.omg.CORBA.TypeCode getTypeCode() {
- if (_type_code == null) {
- org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
- return orb.create_interface_tc(getRepositoryID(), _java_class
- .getName());
- }
-
- return _type_code;
+ @Override
+ protected final TypeCode genTypeCode() {
+ ORB orb = ORB.init();
+ return orb.create_interface_tc(getRepositoryID(), type.getName());
}
- void writeMarshalValue(java.io.PrintWriter pw, String outName,
+ @Override
+ void writeMarshalValue(PrintWriter pw, String outName,
String paramName) {
pw.print("javax.rmi.CORBA.Util.writeRemoteObject(");
pw.print(outName);
@@ -420,16 +408,17 @@
pw.print(')');
}
- void writeUnmarshalValue(java.io.PrintWriter pw, String inName) {
+ @Override
+ void writeUnmarshalValue(PrintWriter pw, String inName) {
pw.print('(');
- pw.print(_java_class.getName());
+ pw.print(type.getName());
pw.print(')');
pw.print(PortableRemoteObject.class.getName());
pw.print(".narrow(");
pw.print(inName);
pw.print('.');
pw.print("read_Object(),");
- pw.print(_java_class.getName());
+ pw.print(type.getName());
pw.print(".class)");
}
@@ -468,9 +457,9 @@
return pkgname + "._" + cplain + "_Stub";
}
- void writeStubClass(java.io.PrintWriter pw) {
+ void writeStubClass(PrintWriter pw) {
- Class c = _java_class;
+ Class c = type;
String cname = c.getName();
String fullname = stubClassName(c);
//String stubname = fullname.substring(fullname.lastIndexOf('.') + 1);
@@ -515,7 +504,7 @@
}
String getStubClassName() {
- Class c = _java_class;
+ Class c = type;
String cname = c.getName();
String pkgname = null;
@@ -531,10 +520,11 @@
return pkgname + "." + "_" + cplain + "_Stub";
}
+ @Override
void addDependencies(Set classes) {
- Class c = _java_class;
+ Class c = type;
- if (c == java.rmi.Remote.class || classes.contains(c))
+ if (c == Remote.class || classes.contains(c))
return;
classes.add(c);
@@ -556,6 +546,7 @@
}
}
+ @Override
boolean copyInStub() {
return false;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
index 72f8e91..c75478a 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RemoteInterfaceDescriptor.java
@@ -18,8 +18,13 @@
package org.apache.yoko.rmi.impl;
-class RemoteInterfaceDescriptor extends RemoteDescriptor {
+final class RemoteInterfaceDescriptor extends RemoteDescriptor {
RemoteInterfaceDescriptor(Class type, TypeRepository repository) {
super(type, repository);
}
+
+ @Override
+ protected RemoteInterfaceDescriptor genRemoteInterface() {
+ return this;
+ }
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
index a30e822..f51ee0b 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/SimpleDescriptor.java
@@ -18,6 +18,8 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.TypeCode;
+
abstract class SimpleDescriptor extends TypeDescriptor {
private final String idl_name;
SimpleDescriptor(Class type, TypeRepository repository, String idl_name,
@@ -30,34 +32,37 @@
}
@Override
- protected String genIDLName() {
+ protected final String genIDLName() {
return idl_name;
}
@Override
- protected String genPackageName() {
+ protected final String genPackageName() {
return "";
}
@Override
- protected String genTypeName() {
+ protected final String genTypeName() {
return idl_name;
}
- org.omg.CORBA.TypeCode getTypeCode() {
+ @Override
+ protected final TypeCode genTypeCode() {
return _type_code;
}
+ @Override
boolean copyInStub() {
return false;
}
+ @Override
public boolean copyBetweenStates() {
return false;
}
+ @Override
public boolean copyWithinState() {
return false;
}
-
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
index 9d5c38b..f459794 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/StringDescriptor.java
@@ -18,16 +18,25 @@
package org.apache.yoko.rmi.impl;
+import org.omg.CORBA.MARSHAL;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.WStringValueHelper;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+import java.io.Serializable;
+
class StringDescriptor extends ValueDescriptor {
- public String getIDLName() {
- return "CORBA_WStringValue";
- }
-
StringDescriptor(TypeRepository repository) {
super(String.class, repository);
}
@Override
+ protected final String genIDLName() {
+ return "CORBA_WStringValue";
+ }
+
+ @Override
protected String genPackageName() {
return "CORBA";
}
@@ -38,30 +47,28 @@
}
/** Read an instance of this value from a CDR stream */
- public Object read(org.omg.CORBA.portable.InputStream in) {
- return org.omg.CORBA.WStringValueHelper.read(in);
+ @Override
+ public Object read(InputStream in) {
+ return WStringValueHelper.read(in);
}
/** Write an instance of this value to a CDR stream */
- public void write(org.omg.CORBA.portable.OutputStream out, Object value) {
- org.omg.CORBA.WStringValueHelper.write(out, (String) value);
+ @Override
+ public void write(OutputStream out, Object value) {
+ WStringValueHelper.write(out, (String) value);
}
- public void writeValue(org.omg.CORBA.portable.OutputStream out,
- java.io.Serializable value) {
- throw new org.omg.CORBA.MARSHAL("internal error");
+ @Override
+ public void writeValue(OutputStream out, Serializable value) {
+ throw new MARSHAL("internal error");
}
- public java.io.Serializable readValue(
- org.omg.CORBA.portable.InputStream in, java.io.Serializable value,
- java.util.Map offsetMap) {
- throw new org.omg.CORBA.MARSHAL("internal error");
+ @Override
+ protected final TypeCode genTypeCode() {
+ return WStringValueHelper.type();
}
- org.omg.CORBA.TypeCode getTypeCode() {
- return org.omg.CORBA.WStringValueHelper.type();
- }
-
+ @Override
Object copyObject(Object value, CopyState state) {
return value;
}
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
index 33730f3..3bbabf2 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeDescriptor.java
@@ -18,43 +18,51 @@
package org.apache.yoko.rmi.impl;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+import java.io.PrintWriter;
+import java.rmi.Remote;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
import java.util.logging.Logger;
-import org.omg.CORBA.portable.InputStream;
-
abstract class TypeDescriptor extends ModelElement {
static Logger logger = Logger.getLogger(TypeDescriptor.class.getName());
- final Class _java_class;
+ final Class type;
- private volatile String _repid;
+ private volatile String _repid = null;
- protected RemoteInterfaceDescriptor remoteDescriptor;
-
- private FullKey _key;
-
- private String package_name; // the package name qualifier (if any)
- public String getPackageName() {
- checkInit();
- return package_name;
+ private volatile String packageName = null; // the package name qualifier (if any)
+ protected String genPackageName() {
+ int idx = java_name.lastIndexOf('.');
+ return ((idx < 0) ? "" : java_name.substring(0, idx));
+ }
+ public final String getPackageName() {
+ if (null == packageName) packageName = genPackageName();
+ return packageName;
}
- private String type_name; // the simple type name (minus package, if any)
- public String getTypeName() {
- checkInit();
- return type_name;
+ private volatile String typeName = null; // the simple type name (minus package, if any)
+ protected String genTypeName() {
+ int idx = java_name.lastIndexOf('.');
+ return ((idx < 0) ? java_name : java_name.substring(idx + 1));
+ }
+ public final String getTypeName() {
+ if (null == typeName) typeName = genTypeName();
+ return typeName;
}
+ private volatile FullKey key = null;
+ private FullKey genKey() {
+ return new FullKey(getRepositoryID(), type);
+ }
public final FullKey getKey() {
- if (null == _key) {
- _key = new FullKey(getRepositoryID(), _java_class);
- }
- return _key;
+ if (null == key) key = genKey();
+ return key;
}
public static class SimpleKey {
@@ -109,30 +117,13 @@
@Override
public String toString() {
return String.format("%s{class=\"%s\",repId=\"%s\"}",
- this.getClass().getName(), _java_class,
+ this.getClass().getName(), type,
getRepositoryID());
}
protected TypeDescriptor(Class type, TypeRepository repository) {
super(repository, type.getName());
- _java_class = type;
- }
-
- @Override
- protected void init() {
- package_name = genPackageName();
- type_name = genTypeName();
- super.init();
- }
-
- protected String genPackageName() {
- int idx = java_name.lastIndexOf('.');
- return ((idx < 0) ? "" : java_name.substring(0, idx));
- }
-
- protected String genTypeName() {
- int idx = java_name.lastIndexOf('.');
- return ((idx < 0) ? java_name : java_name.substring(idx + 1));
+ this.type = type;
}
@Override
@@ -141,61 +132,34 @@
}
protected String genRepId() {
- return String.format("RMI:%s:%016X", _java_class.getName(), 0);
+ return String.format("RMI:%s:%016X", type.getName(), 0);
}
-
public final String getRepositoryID() {
if (_repid == null) _repid = genRepId();
return _repid;
}
- RemoteInterfaceDescriptor getRemoteInterface() {
- return remoteDescriptor;
+ private volatile RemoteInterfaceDescriptor remoteInterface = null;
+ protected RemoteInterfaceDescriptor genRemoteInterface() {
+ throw new UnsupportedOperationException("class " + type + " does not implement " + Remote.class.getName());
+ }
+ final RemoteInterfaceDescriptor getRemoteInterface() {
+ if (null == remoteInterface) remoteInterface = genRemoteInterface();
+ return remoteInterface;
}
- void setRemoteInterface(RemoteInterfaceDescriptor desc) {
- remoteDescriptor = desc;
- }
+
/** Read an instance of this value from a CDR stream */
- public abstract Object read(org.omg.CORBA.portable.InputStream in);
+ public abstract Object read(InputStream in);
/** Write an instance of this value to a CDR stream */
- public abstract void write(org.omg.CORBA.portable.OutputStream out,
- Object val);
+ public abstract void write(OutputStream out, Object val);
public boolean isCustomMarshalled() {
return false;
}
- static class WrappedIOException extends RuntimeException {
- IOException wrapped;
-
- WrappedIOException(IOException ex) {
- super("wrapped IO exception");
- this.wrapped = ex;
- }
- }
-
- CorbaObjectReader makeCorbaObjectReader(final InputStream in,
- final Map offsetMap, final java.io.Serializable obj)
- throws IOException {
- try {
- return (CorbaObjectReader) AccessController
- .doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- return new CorbaObjectReader(in, offsetMap, obj);
- } catch (IOException ex) {
- throw new WrappedIOException(ex);
- }
- }
- });
- } catch (WrappedIOException ex) {
- throw ex.wrapped;
- }
- }
-
String makeSignature(Class type) {
if (type.isPrimitive()) {
@@ -242,15 +206,20 @@
return 0L;
}
- protected org.omg.CORBA.TypeCode _type_code = null;
+ protected TypeCode _type_code = null;
- abstract org.omg.CORBA.TypeCode getTypeCode();
+ private volatile TypeCode typeCode = null;
+ protected abstract TypeCode genTypeCode();
+ final TypeCode getTypeCode() {
+ if (null == typeCode) typeCode = genTypeCode();
+ return typeCode;
+ }
Object copyObject(Object value, CopyState state) {
throw new InternalError("cannot copy " + value.getClass().getName());
}
- void writeMarshalValue(java.io.PrintWriter pw, String outName,
+ void writeMarshalValue(PrintWriter pw, String outName,
String paramName) {
pw.print(outName);
pw.print('.');
@@ -261,7 +230,7 @@
pw.print(')');
}
- void writeUnmarshalValue(java.io.PrintWriter pw, String inName) {
+ void writeUnmarshalValue(PrintWriter pw, String inName) {
pw.print(inName);
pw.print('.');
pw.print("read_");
@@ -270,7 +239,7 @@
pw.print(')');
}
- void addDependencies(java.util.Set<Class<?>> classes) {
+ void addDependencies(Set<Class<?>> classes) {
return;
}
@@ -278,7 +247,7 @@
return true;
}
- void print(java.io.PrintWriter pw, java.util.Map<Object,Integer> recurse, Object val) {
+ void print(PrintWriter pw, Map<Object,Integer> recurse, Object val) {
if (val == null) {
pw.print("null");
}
@@ -288,15 +257,11 @@
pw.print("^" + old);
} else {
Integer key = new Integer(System.identityHashCode(val));
- pw.println(_java_class.getName() + "@"
+ pw.println(type.getName() + "@"
+ Integer.toHexString(key.intValue()));
}
}
- synchronized TypeDescriptor getSelf() {
- return this;
- }
-
/**
* Method copyBetweenStates.
*
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeRepository.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeRepository.java
index 6ad6894..1ba4611 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeRepository.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/TypeRepository.java
@@ -125,15 +125,15 @@
return ((enumType == type) ? new EnumSubclassDescriptor(type, repo) : get(enumType));
} else if (type.isArray()) {
return ArrayDescriptor.get(type, repo);
- } else if (!type.isInterface()
- && Serializable.class.isAssignableFrom(type)) {
- return new ValueDescriptor(type, repo);
} else if (Remote.class.isAssignableFrom(type)) {
if (type.isInterface()) {
return new RemoteInterfaceDescriptor(type, repo);
} else {
return new RemoteClassDescriptor(type, repo);
}
+ } else if (!type.isInterface()
+ && Serializable.class.isAssignableFrom(type)) {
+ return new ValueDescriptor(type, repo);
} else if (Object.class.isAssignableFrom(type)) {
if (isAbstractInterface(type)) {
logger.finer("encoding " + type + " as abstract interface");
@@ -267,33 +267,8 @@
return getDescriptor(type).getRepositoryID();
}
- public RemoteInterfaceDescriptor getRemoteDescriptor(Class<?> type) {
- TypeDescriptor td = getDescriptor(type);
- RemoteInterfaceDescriptor result = td.getRemoteInterface();
-
- if (result != null) {
- return result;
- }
-
- RemoteDescriptor desc;
-
- if (java.rmi.Remote.class.isAssignableFrom(type)) {
- if (type.isInterface()) {
- desc = new RemoteInterfaceDescriptor(type, this);
- } else {
- desc = new RemoteClassDescriptor(type, this);
- }
-
- desc.init();
- } else {
- throw new IllegalArgumentException("class " + type.toString()
- + " does not implement" + " java.rmi.Remote");
- }
-
- result = desc.getRemoteInterface();
- td.setRemoteInterface(result);
-
- return result;
+ public RemoteInterfaceDescriptor getRemoteInterface(Class<?> type) {
+ return getDescriptor(type).getRemoteInterface();
}
public TypeDescriptor getDescriptor(Class<?> type) {
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/UtilImpl.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/UtilImpl.java
index 6343381..8fe5335 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/UtilImpl.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/UtilImpl.java
@@ -715,7 +715,7 @@
static Object copyRMIStub(RMIStub stub) throws RemoteException {
ClassLoader loader = getContextClassLoader();
- if (getClassLoader(stub._descriptor._java_class) == loader) {
+ if (getClassLoader(stub._descriptor.type) == loader) {
return stub;
}
@@ -724,7 +724,7 @@
Class<?> targetClass;
try {
- targetClass = Util.loadClass(desc._java_class.getName(), stub
+ targetClass = Util.loadClass(desc.type.getName(), stub
._get_codebase(), loader);
} catch (ClassNotFoundException ex) {
logger.log(Level.FINER, "copyRMIStub exception (current loader is: " + loader
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
index 65e6465..0d2a3e8 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueDescriptor.java
@@ -114,7 +114,7 @@
@Override
protected String genRepId() {
- return String.format("RMI:%s:%016X:%016X", StringUtil.convertToValidIDLNames(_java_class.getName()),
+ return String.format("RMI:%s:%016X:%016X", StringUtil.convertToValidIDLNames(type.getName()),
_hash_code, getSerialVersionUID());
}
@@ -136,7 +136,7 @@
// skip //
}
}
- ObjectStreamClass serialForm = ObjectStreamClass.lookup(_java_class);
+ ObjectStreamClass serialForm = ObjectStreamClass.lookup(type);
return (serialForm != null) ? serialForm.getSerialVersionUID() : 0L;
}
@@ -156,7 +156,6 @@
}
private void init0() {
- final Class<?> type = _java_class;
final Class<?> superClass = type.getSuperclass();
_is_rmi_stub = RMIStub.class.isAssignableFrom(type);
@@ -174,7 +173,7 @@
}
- AccessController.doPrivileged(new PrivilegedAction() {
+ AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
for (Class<?> curr = type; curr != null; curr = curr.getSuperclass()) {
@@ -222,7 +221,7 @@
// validate readObject
//
if ((_write_object_method == null) || !Modifier.isPrivate(_write_object_method.getModifiers())
- || Modifier.isStatic(_write_object_method.getModifiers()) || (_write_object_method.getDeclaringClass() != _java_class)) {
+ || Modifier.isStatic(_write_object_method.getModifiers()) || (_write_object_method.getDeclaringClass() != type)) {
_write_object_method = null;
@@ -492,7 +491,7 @@
}
protected void defaultWriteValue(ObjectWriter writer, Serializable val) throws IOException {
- logger.finer("writing fields for " + _java_class);
+ logger.finer("writing fields for " + type);
FieldDescriptor[] fields = _fields;
if (fields == null) {
@@ -549,7 +548,7 @@
throw (UnknownException) new UnknownException(ex.getTargetException()).initCause(ex.getTargetException());
} catch (NullPointerException ex) {
- logger.log(Level.WARNING, "unable to create instance of " + _java_class.getName(), ex);
+ logger.log(Level.WARNING, "unable to create instance of " + type.getName(), ex);
logger.warning("constructor => " + _constructor);
throw ex;
@@ -602,7 +601,7 @@
int key = System.identityHashCode(val);
recurse.put(val, key);
- pw.println(_java_class.getName() + "@" + Integer.toHexString(key) + "[");
+ pw.println(type.getName() + "@" + Integer.toHexString(key) + "[");
printFields(pw, recurse, val);
@@ -638,7 +637,7 @@
return;
}
- logger.fine("reading fields for " + _java_class.getName());
+ logger.fine("reading fields for " + type.getName());
for (FieldDescriptor _field : _fields) {
@@ -661,7 +660,7 @@
return Collections.EMPTY_MAP;
}
- logger.finer("reading fields for " + _java_class.getName());
+ logger.finer("reading fields for " + type.getName());
Map map = new HashMap();
@@ -680,7 +679,7 @@
return;
}
- logger.finer("writing fields for " + _java_class.getName());
+ logger.finer("writing fields for " + type.getName());
for (FieldDescriptor _field : _fields) {
@@ -748,7 +747,7 @@
}
protected long computeHashCode() {
- Class type = _java_class;
+ Class type = this.type;
if (_is_externalizable) {
return 1L;
@@ -837,26 +836,24 @@
return _value_members;
}
- TypeCode getTypeCode() {
- if (_type_code != null)
- return _type_code;
-
+ @Override
+ protected TypeCode genTypeCode() {
ORB orb = ORB.init();
- _type_code = orb.create_recursive_tc(getRepositoryID());
+ TypeCode typeCode = orb.create_recursive_tc(getRepositoryID());
TypeCode _base = ((_super_descriptor == null) ? null : _super_descriptor.getTypeCode());
- Class javaClass = _java_class;
+ Class javaClass = type;
if (javaClass.isArray()) {
TypeDescriptor desc = repo.getDescriptor(javaClass.getComponentType());
- _type_code = desc.getTypeCode();
- _type_code = orb.create_sequence_tc(0, _type_code);
- _type_code = orb.create_value_box_tc(getRepositoryID(), "Sequence", _type_code);
+ typeCode = desc.getTypeCode();
+ typeCode = orb.create_sequence_tc(0, typeCode);
+ typeCode = orb.create_value_box_tc(getRepositoryID(), "Sequence", typeCode);
} else {
- _type_code = orb.create_value_tc(getRepositoryID(), javaClass.getSimpleName(), VM_NONE.value, _base, getValueMembers());
+ typeCode = orb.create_value_tc(getRepositoryID(), javaClass.getSimpleName(), VM_NONE.value, _base, getValueMembers());
}
- return _type_code;
+ return typeCode;
}
private static final OperationDescription[] ZERO_OPERATIONS = {};
@@ -866,7 +863,7 @@
FullValueDescription getFullValueDescription() {
FullValueDescription fvd = new FullValueDescription();
- fvd.name = _java_class.getName();
+ fvd.name = type.getName();
fvd.id = getRepositoryID();
fvd.is_abstract = false;
fvd.is_custom = isCustomMarshalled();
@@ -902,7 +899,7 @@
}
ObjectDeserializer(FullValueDescription desc, RunTime runtime) throws IOException {
- Class myClass = _java_class;
+ Class myClass = type;
ValueMember[] members = desc.members;
fields = new FieldDescriptor[members.length];
for (int i = 0; i < members.length; i++) {
@@ -962,7 +959,7 @@
} else {
wdesc = (ValueDescriptor) repo.getDescriptor(oorig.getClass());
- logger.finer("writeReplace -> " + _java_class.getName());
+ logger.finer("writeReplace -> " + type.getName());
}
return wdesc.copyObject2(oorig, state);
@@ -991,7 +988,7 @@
writeValue(writer, oorig);
return writer;
} catch (IOException ex) {
- String msg = String.format("%s writing %s", ex, _java_class.getName());
+ String msg = String.format("%s writing %s", ex, type.getName());
throw (MARSHAL) new MARSHAL(msg).initCause(ex);
}
}
@@ -1002,7 +999,7 @@
readValue(reader, copy);
return readResolve(copy);
} catch (IOException ex) {
- String msg = String.format("%s reading instance of %s", ex, _java_class.getName());
+ String msg = String.format("%s reading instance of %s", ex, type.getName());
throw (MARSHAL) new MARSHAL(msg).initCause(ex);
}
}
@@ -1021,7 +1018,7 @@
pw.print(paramName);
pw.print(',');
- MethodDescriptor.writeJavaType(pw, _java_class);
+ MethodDescriptor.writeJavaType(pw, type);
pw.print(".class)");
}
@@ -1030,12 +1027,13 @@
pw.print('.');
pw.print("read_value");
pw.print('(');
- MethodDescriptor.writeJavaType(pw, _java_class);
+ MethodDescriptor.writeJavaType(pw, type);
pw.print(".class)");
}
+ @Override
void addDependencies(Set<Class<?>> classes) {
- Class c = _java_class;
+ Class c = type;
if ((c == Object.class) || classes.contains(c))
return;
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueHandlerImpl.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueHandlerImpl.java
index 7004c25..6bfb65a 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueHandlerImpl.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ValueHandlerImpl.java
@@ -172,7 +172,7 @@
if (val instanceof RMIStub) {
RMIStub stub = (RMIStub) val;
- Class type = stub._descriptor._java_class;
+ Class type = stub._descriptor.type;
RMIState state = RMIState.current();
Stub result = state.getStaticStub(stub._get_codebase(), type);