Encapsulate init of ModelElement fields and Descriptor repids
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 80f8e42..8a64c50 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
@@ -23,12 +23,9 @@
super(type, repository);
}
- public String getRepositoryID() {
- if (_repid == null)
- _repid = "IDL:" + getJavaClass().getName().replace('.', '/')
- + ":1.0";
-
- return _repid;
+ @Override
+ protected String genRepId() {
+ return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
}
/** Read an instance of this value from a CDR stream */
@@ -60,7 +57,7 @@
if (_type_code == null) {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
_type_code = orb.create_abstract_interface_tc(getRepositoryID(),
- getJavaClass().getName());
+ _java_class.getName());
}
return _type_code;
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 39d2c3a..faabb00 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
@@ -23,12 +23,9 @@
super(type, rep);
}
- public String getRepositoryID() {
- if (_repid == null)
- _repid = "IDL:" + getJavaClass().getName().replace('.', '/')
- + ":1.0";
-
- return _repid;
+ @Override
+ protected String genRepId() {
+ return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
}
/** Read an instance of this value from a CDR stream */
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 0eccedb..1a5f7cb 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
@@ -35,45 +35,30 @@
protected Class basicType;
protected Class elementType;
- // repository ID for the array class
- String _repid = null;
// repository ID for the contained elements
- String _elementRepid = null;
+ private volatile String _elementRepid = null;
- public String getRepositoryID() {
- if (_repid != null)
- return _repid;
+ @Override
+ protected String genRepId() {
+ if (elementType.isPrimitive() || elementType == Object.class)
+ return String.format("RMI:%s:%016X", _java_class.getName(), 0);
- if (elementType.isPrimitive() || elementType == Object.class) {
- _repid = "RMI:" + getJavaClass().getName() + ":0000000000000000";
- } else {
- TypeDescriptor desc = repo.getDescriptor(elementType);
- String elemRep = desc.getRepositoryID();
- String hash = elemRep.substring(elemRep.indexOf(':', 4));
- _repid = "RMI:" + getJavaClass().getName() + hash;
- }
-
- // System.out.println ("REPID "+getJavaClass()+" >> "+_repid);
-
- return _repid;
+ 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);
}
-
- public String getElementRepositoryID() {
- if (_elementRepid != null) {
- return _elementRepid;
- }
-
+ private final String genElemRepId() {
if (elementType.isPrimitive() || elementType == Object.class) {
// use the descriptor type past the array type marker
- _elementRepid = "RMI:" + getJavaClass().getName().substring(1) + ":0000000000000000";
- } else {
- TypeDescriptor desc = repo.getDescriptor(elementType);
- _elementRepid = desc.getRepositoryID();
+ return String.format("RMI:%s:%016X", _java_class.getName().substring(1), 0);
}
+ return repo.getDescriptor(elementType).getRepositoryID();
+ }
- // System.out.println ("Element REPID "+getJavaClass()+" >> "+_elementRepid);
-
+ public String getElementRepositoryID() {
+ if (_elementRepid == null) _elementRepid = genElemRepId();
return _elementRepid;
}
@@ -178,17 +163,11 @@
*/
public Object read(org.omg.CORBA.portable.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 " + getJavaClass());
+ 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.
- Class clz = getJavaClass();
- if (clz == null) {
- return _in.read_value(getRepositoryID());
- }
- else {
- return _in.read_value(clz);
- }
+ return ((null == _java_class) ? _in.read_value(getRepositoryID()) : _in.read_value(_java_class));
}
/** Write an instance of this value to a CDR stream */
@@ -242,7 +221,7 @@
Object[] arr = (Object[]) value;
out.write_long(arr.length);
- logger.finer("writing " + getJavaClass().getName() + " size="
+ logger.finer("writing " + _java_class.getName() + " size="
+ arr.length);
for (int i = 0; i < arr.length; i++) {
@@ -261,7 +240,7 @@
offsetMap.put(key, arr);
- logger.fine("reading " + getJavaClass().getName() + " size="
+ logger.fine("reading " + _java_class.getName() + " size="
+ arr.length);
for (int i = 0; i < length; i++) {
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 89fd716..166a202 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
@@ -23,20 +23,11 @@
super(type, repository);
}
- String ex_repid = null;
+ private volatile String ex_repid = null;
- public String getExceptionRepositoryID() {
- if (ex_repid == null) {
- init_repid();
- }
-
- return ex_repid;
- }
-
- void init_repid() {
- Class type = getJavaClass();
- String name = type.getName();
- String encname = null;
+ private String genExceptionRepId() {
+ String name = _java_class.getName();
+ final String encname;
if (name.endsWith("Exception")) {
encname = name.substring(0, name.length() - 7);
@@ -44,7 +35,11 @@
encname = name + "Ex";
}
- ex_repid = "IDL:" + encname.replace('.', '/') + ":1.0";
+ return String.format("IDL:%s:1.0", encname.replace('.', '/'));
}
+ public 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 c90be24..9c7de4f 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
@@ -36,7 +36,7 @@
}
@Override
- public String getRepositoryID() {
+ protected String genRepId() {
return repid;
}
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 7a06399..9d8f2c3 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
@@ -38,7 +38,7 @@
}
@Override
- public String getRepositoryID() {
+ protected String genRepId() {
return repid;
}
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 bdd4964..ad379af 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
@@ -64,7 +64,7 @@
FieldDescriptor findField(ValueMember valueMember) {
FieldDescriptor result = null;
- for (Class c = getJavaClass(); c != null; c = c.getSuperclass()) {
+ for (Class c = _java_class; c != null; c = c.getSuperclass()) {
TypeDescriptor td = repo.getDescriptor(c);
if (td instanceof ValueDescriptor) {
ValueDescriptor vd = (ValueDescriptor) td;
@@ -85,12 +85,8 @@
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.yoko.rmi.impl.TypeDescriptor#getRepositoryID()
- */
- public String getRepositoryID() {
+ @Override
+ protected String genRepId() {
return repid;
}
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 d7228d6..11dc546 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
@@ -51,7 +51,7 @@
super.init();
try {
- final Class type = getJavaClass();
+ final Class type = _java_class;
final String helperName = type.getName() + "Helper";
final Class helperClass = javax.rmi.CORBA.Util.loadClass(
helperName, null, type.getClassLoader());
@@ -98,7 +98,7 @@
} catch (ClassNotFoundException ex) {
throw new RuntimeException("cannot load IDL Helper class for "
- + getJavaClass(), ex);
+ + _java_class, ex);
}
}
@@ -119,7 +119,7 @@
// 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(getJavaClass());
+ return _in.read_Object(_java_class);
}
else {
@@ -142,7 +142,7 @@
public Object readValue(org.omg.CORBA.portable.InputStream in) {
if (isAbstract) {
- throw new MARSHAL("IDL Entity " + getJavaClass().getName()
+ throw new MARSHAL("IDL Entity " + _java_class.getName()
+ " is abstract");
}
@@ -177,7 +177,7 @@
public void writeValue(org.omg.CORBA.portable.OutputStream out, java.io.Serializable val) {
if (isAbstract) {
- throw new MARSHAL("IDL Entity " + getJavaClass().getName()
+ throw new MARSHAL("IDL Entity " + _java_class.getName()
+ " is abstract");
}
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 1dfa274..16f1a51 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
@@ -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].getJavaClass().isInstance(ex)) {
+ if (exception_types[i]._java_class.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/RMIServant.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/RMIServant.java
index 28d773b..e70afe6 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.getJavaClass();
+ return _descriptor._java_class;
}
RMIState getRMIState() {
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 20fb38c..4cd36cc 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
@@ -23,37 +23,17 @@
super(type, repository);
}
- String stub_repid = null;
-
- public String getRepositoryID() {
- if (stub_repid == null) {
- init_repid();
- }
-
- return stub_repid;
- }
-
- void init_repid() {
- Class type = getJavaClass();
-
- Class[] ifaces = type.getInterfaces();
-
+ @Override
+ protected String genRepId() {
+ final Class[] ifaces = _java_class.getInterfaces();
if (ifaces.length != 2 || ifaces[1] != org.apache.yoko.rmi.util.stub.Stub.class) {
throw new RuntimeException("Unexpected RMIStub structure");
}
- String ifname = ifaces[0].getName();
- String stubClassName = null;
-
- int idx = ifname.lastIndexOf('.');
- if (idx == -1) {
- stubClassName = "_" + ifname + "_Stub";
- } else {
- stubClassName = ifname.substring(0, idx + 1) + "_"
- + ifname.substring(idx + 1) + "_Stub";
- }
-
- stub_repid = "RMI:" + stubClassName + ":0";
+ final String ifname = ifaces[0].getName();
+ final int idx = ifname.lastIndexOf('.');
+ return ((idx < 0) ? String.format("RMI:_%s_Stub:0", ifname) :
+ String.format("RMI:%s_%s_Stub:0", ifname.substring(0, idx + 1), ifname.substring(idx + 1)));
}
//
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 74f4c06..d0855be 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.getJavaClass();
+ Class type = stub._descriptor._java_class;
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 ca40f49..c660417 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
@@ -20,8 +20,9 @@
class RemoteClassDescriptor extends RemoteDescriptor {
- public String getRepositoryID() {
- return "IDL:" + getJavaClass().getName().replace('.', '/') + ":1.0";
+ @Override
+ protected String genRepId() {
+ return String.format("IDL:%s:1.0", _java_class.getName().replace('.', '/'));
}
RemoteClassDescriptor(Class type, TypeRepository repository) {
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 4154c49..5e91b4b 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
@@ -54,9 +54,9 @@
if (this instanceof RemoteInterfaceDescriptor) {
result = (RemoteInterfaceDescriptor) this;
} else {
- Class[] remotes = collect_remote_interfaces(getJavaClass());
+ Class[] remotes = collect_remote_interfaces(_java_class);
if (remotes.length == 0) {
- throw new RuntimeException(getJavaClass().getName()
+ throw new RuntimeException(_java_class.getName()
+ " has no remote interfaces");
}
Class most_specific_interface = remotes[0];
@@ -79,7 +79,7 @@
public String[] all_interfaces() {
if (_ids == null) {
- Class[] ifaces = collect_remote_interfaces(getJavaClass());
+ Class[] ifaces = collect_remote_interfaces(_java_class);
int len = ifaces.length;
String[] ids = new String[len];
for (int i = 0; i < len; i++) {
@@ -110,7 +110,7 @@
void debugMethodMap() {
if (logger.isLoggable(Level.FINER)) {
- logger.finer("METHOD MAP FOR " + getJavaClass().getName());
+ logger.finer("METHOD MAP FOR " + _java_class.getName());
Iterator it = method_map.keySet().iterator();
while (it.hasNext()) {
@@ -165,7 +165,7 @@
ArrayList method_list = new ArrayList();
// first step is to build the helpers for any super classes
- Class[] supers = getJavaClass().getInterfaces();
+ Class[] supers = _java_class.getInterfaces();
super_descriptors = new ArrayList();
Map all_methods = new HashMap();
@@ -266,7 +266,7 @@
Method[] getLocalMethods() {
ArrayList result = new ArrayList();
- addNonRemoteInterfaceMethods(getJavaClass(), result);
+ addNonRemoteInterfaceMethods(_java_class, result);
Method[] out = new Method[result.size()];
result.toArray(out);
@@ -393,7 +393,7 @@
/** 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(),
- getJavaClass());
+ _java_class);
}
/** Write an instance of this value to a CDR stream */
@@ -404,7 +404,7 @@
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(), getJavaClass()
+ return orb.create_interface_tc(getRepositoryID(), _java_class
.getName());
}
@@ -422,14 +422,14 @@
void writeUnmarshalValue(java.io.PrintWriter pw, String inName) {
pw.print('(');
- pw.print(getJavaClass().getName());
+ pw.print(_java_class.getName());
pw.print(')');
pw.print(PortableRemoteObject.class.getName());
pw.print(".narrow(");
pw.print(inName);
pw.print('.');
pw.print("read_Object(),");
- pw.print(getJavaClass().getName());
+ pw.print(_java_class.getName());
pw.print(".class)");
}
@@ -470,7 +470,7 @@
void writeStubClass(java.io.PrintWriter pw) {
- Class c = getJavaClass();
+ Class c = _java_class;
String cname = c.getName();
String fullname = stubClassName(c);
//String stubname = fullname.substring(fullname.lastIndexOf('.') + 1);
@@ -515,7 +515,7 @@
}
String getStubClassName() {
- Class c = getJavaClass();
+ Class c = _java_class;
String cname = c.getName();
String pkgname = null;
@@ -532,7 +532,7 @@
}
void addDependencies(Set classes) {
- Class c = getJavaClass();
+ Class c = _java_class;
if (c == java.rmi.Remote.class || classes.contains(c))
return;
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 96e3a77..a30e822 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
@@ -24,10 +24,6 @@
org.omg.CORBA.TCKind tc) {
super(type, repository);
this.idl_name = idl_name;
- // the simple type name is the same as the IDL name. The
- // package name is null
- setTypeName(idl_name);
- setPackageName("");
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
_type_code = orb.get_primitive_tc(tc);
@@ -38,6 +34,16 @@
return idl_name;
}
+ @Override
+ protected String genPackageName() {
+ return "";
+ }
+
+ @Override
+ protected String genTypeName() {
+ return idl_name;
+ }
+
org.omg.CORBA.TypeCode getTypeCode() {
return _type_code;
}
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 8374213..9d5c38b 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
@@ -25,9 +25,16 @@
StringDescriptor(TypeRepository repository) {
super(String.class, repository);
- // strings have a special type and package name other than the java class name.
- setTypeName("WStringValue");
- setPackageName("CORBA");
+ }
+
+ @Override
+ protected String genPackageName() {
+ return "CORBA";
+ }
+
+ @Override
+ protected String genTypeName() {
+ return "WStringValue";
}
/** Read an instance of this value from a CDR stream */
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 0641778..33730f3 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
@@ -30,37 +30,29 @@
abstract class TypeDescriptor extends ModelElement {
static Logger logger = Logger.getLogger(TypeDescriptor.class.getName());
- private final Class _java_class;
+ final Class _java_class;
- protected String _repid;
+ private volatile String _repid;
protected RemoteInterfaceDescriptor remoteDescriptor;
private FullKey _key;
- private String package_name = ""; // the package name qualifier (if any)
- protected void setPackageName(String name) {
- package_name = name;
- }
+ private String package_name; // the package name qualifier (if any)
public String getPackageName() {
+ checkInit();
return package_name;
}
- private String type_name = ""; // the simple type name (minus package, if any)
- protected void setTypeName(String name) {
- type_name = name;
- }
+ private String type_name; // the simple type name (minus package, if any)
public String getTypeName() {
+ checkInit();
return type_name;
}
- public Class getJavaClass() {
- return _java_class;
- }
-
public final FullKey getKey() {
if (null == _key) {
- _key = new FullKey(getRepositoryID(), getJavaClass());
+ _key = new FullKey(getRepositoryID(), _java_class);
}
return _key;
}
@@ -117,26 +109,30 @@
@Override
public String toString() {
return String.format("%s{class=\"%s\",repId=\"%s\"}",
- this.getClass().getName(), getJavaClass(),
+ this.getClass().getName(), _java_class,
getRepositoryID());
}
protected TypeDescriptor(Class type, TypeRepository repository) {
super(repository, type.getName());
_java_class = type;
- String typeName = type.getName();
- // break up the simple type and package
- int idx = typeName.lastIndexOf('.');
- // if we have a package, split it into the component parts
- if (idx >= 0) {
- setPackageName(typeName.substring(0, idx));
- setTypeName(typeName.substring(idx + 1));
- }
- else {
- // no package...the type is the simple name
- setPackageName("");
- setTypeName(typeName);
- }
+ }
+
+ @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));
}
@Override
@@ -144,10 +140,12 @@
return java_name.replace('.', '_');
}
- public String getRepositoryID() {
- if (_repid == null)
- _repid = "RMI:" + getJavaClass().getName() + ":0000000000000000";
+ protected String genRepId() {
+ return String.format("RMI:%s:%016X", _java_class.getName(), 0);
+ }
+ public final String getRepositoryID() {
+ if (_repid == null) _repid = genRepId();
return _repid;
}
@@ -290,7 +288,7 @@
pw.print("^" + old);
} else {
Integer key = new Integer(System.identityHashCode(val));
- pw.println(getJavaClass().getName() + "@"
+ pw.println(_java_class.getName() + "@"
+ Integer.toHexString(key.intValue()));
}
}
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 2131bb7..6343381 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.getJavaClass()) == loader) {
+ if (getClassLoader(stub._descriptor._java_class) == loader) {
return stub;
}
@@ -724,7 +724,7 @@
Class<?> targetClass;
try {
- targetClass = Util.loadClass(desc.getJavaClass().getName(), stub
+ targetClass = Util.loadClass(desc._java_class.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 a5dde95..a686f77 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
@@ -112,35 +112,18 @@
protected boolean isEnum() { return false; }
- public String getRepositoryID() {
- if (_repid == null) {
- StringBuilder buf = new StringBuilder("RMI:");
- buf.append(StringUtil.convertToValidIDLNames(getJavaClass().getName()));
- buf.append(":");
-
- String hashCode = Long.toHexString(_hash_code).toUpperCase();
- for (int i = 0; (i + hashCode.length()) != 16; i++)
- buf.append('0');
- buf.append(hashCode);
-
- long serialVersionUID = getSerialVersionUID();
-
- buf.append(":");
- String serialID = Long.toHexString(serialVersionUID).toUpperCase();
- for (int i = 0; (i + serialID.length()) != 16; i++)
- buf.append('0');
- buf.append(serialID);
-
- _repid = buf.toString();
- }
-
- return _repid;
+ @Override
+ protected String genRepId() {
+ return String.format("RMI:%s:%016X:%016X", StringUtil.convertToValidIDLNames(_java_class.getName()),
+ _hash_code, getSerialVersionUID());
}
- public String getCustomRepositoryID() {
- if (_custom_repid == null) {
- _custom_repid = "RMI:org.omg.custom." + getRepositoryID().substring(4);
- }
+ private String genCustomRepId() {
+ return String.format("RMI:org.omg.custom.%s", getRepositoryID().substring(4));
+ }
+
+ public final String getCustomRepositoryID() {
+ if (_custom_repid == null) _custom_repid = genCustomRepId();
return _custom_repid;
}
@@ -153,7 +136,7 @@
// skip //
}
}
- ObjectStreamClass serialForm = ObjectStreamClass.lookup(getJavaClass());
+ ObjectStreamClass serialForm = ObjectStreamClass.lookup(_java_class);
return (serialForm != null) ? serialForm.getSerialVersionUID() : 0L;
}
@@ -161,6 +144,7 @@
public void init() {
try {
init0();
+ super.init();
if (_fields == null) {
throw new RuntimeException("fields==null after init!");
@@ -172,7 +156,7 @@
}
private void init0() {
- final Class<?> type = getJavaClass();
+ final Class<?> type = _java_class;
final Class<?> superClass = type.getSuperclass();
_is_rmi_stub = RMIStub.class.isAssignableFrom(type);
@@ -238,7 +222,7 @@
// validate readObject
//
if ((_write_object_method == null) || !Modifier.isPrivate(_write_object_method.getModifiers())
- || Modifier.isStatic(_write_object_method.getModifiers()) || (_write_object_method.getDeclaringClass() != getJavaClass())) {
+ || Modifier.isStatic(_write_object_method.getModifiers()) || (_write_object_method.getDeclaringClass() != _java_class)) {
_write_object_method = null;
@@ -508,7 +492,7 @@
}
protected void defaultWriteValue(ObjectWriter writer, Serializable val) throws IOException {
- logger.finer("writing fields for " + getJavaClass());
+ logger.finer("writing fields for " + _java_class);
FieldDescriptor[] fields = _fields;
if (fields == null) {
@@ -565,7 +549,7 @@
throw (UnknownException) new UnknownException(ex.getTargetException()).initCause(ex.getTargetException());
} catch (NullPointerException ex) {
- logger.log(Level.WARNING, "unable to create instance of " + getJavaClass().getName(), ex);
+ logger.log(Level.WARNING, "unable to create instance of " + _java_class.getName(), ex);
logger.warning("constructor => " + _constructor);
throw ex;
@@ -618,7 +602,7 @@
int key = System.identityHashCode(val);
recurse.put(val, key);
- pw.println(getJavaClass().getName() + "@" + Integer.toHexString(key) + "[");
+ pw.println(_java_class.getName() + "@" + Integer.toHexString(key) + "[");
printFields(pw, recurse, val);
@@ -654,7 +638,7 @@
return;
}
- logger.fine("reading fields for " + getJavaClass().getName());
+ logger.fine("reading fields for " + _java_class.getName());
for (FieldDescriptor _field : _fields) {
@@ -677,7 +661,7 @@
return Collections.EMPTY_MAP;
}
- logger.finer("reading fields for " + getJavaClass().getName());
+ logger.finer("reading fields for " + _java_class.getName());
Map map = new HashMap();
@@ -696,7 +680,7 @@
return;
}
- logger.finer("writing fields for " + getJavaClass().getName());
+ logger.finer("writing fields for " + _java_class.getName());
for (FieldDescriptor _field : _fields) {
@@ -764,7 +748,7 @@
}
protected long computeHashCode() {
- Class type = getJavaClass();
+ Class type = _java_class;
if (_is_externalizable) {
return 1L;
@@ -862,7 +846,7 @@
TypeCode _base = ((_super_descriptor == null) ? null : _super_descriptor.getTypeCode());
- Class javaClass = getJavaClass();
+ Class javaClass = _java_class;
if (javaClass.isArray()) {
TypeDescriptor desc = repo.getDescriptor(javaClass.getComponentType());
_type_code = desc.getTypeCode();
@@ -882,7 +866,7 @@
FullValueDescription getFullValueDescription() {
FullValueDescription fvd = new FullValueDescription();
- fvd.name = getJavaClass().getName();
+ fvd.name = _java_class.getName();
fvd.id = getRepositoryID();
fvd.is_abstract = false;
fvd.is_custom = isCustomMarshalled();
@@ -918,7 +902,7 @@
}
ObjectDeserializer(FullValueDescription desc, RunTime runtime) throws IOException {
- Class myClass = ValueDescriptor.this.getJavaClass();
+ Class myClass = _java_class;
ValueMember[] members = desc.members;
fields = new FieldDescriptor[members.length];
for (int i = 0; i < members.length; i++) {
@@ -978,7 +962,7 @@
} else {
wdesc = (ValueDescriptor) repo.getDescriptor(oorig.getClass());
- logger.finer("writeReplace -> " + getJavaClass().getName());
+ logger.finer("writeReplace -> " + _java_class.getName());
}
return wdesc.copyObject2(oorig, state);
@@ -1007,7 +991,7 @@
writeValue(writer, oorig);
return writer;
} catch (IOException ex) {
- String msg = String.format("%s writing %s", ex, getJavaClass().getName());
+ String msg = String.format("%s writing %s", ex, _java_class.getName());
throw (MARSHAL) new MARSHAL(msg).initCause(ex);
}
}
@@ -1018,7 +1002,7 @@
readValue(reader, copy);
return readResolve(copy);
} catch (IOException ex) {
- String msg = String.format("%s reading instance of %s", ex, getJavaClass().getName());
+ String msg = String.format("%s reading instance of %s", ex, _java_class.getName());
throw (MARSHAL) new MARSHAL(msg).initCause(ex);
}
}
@@ -1037,7 +1021,7 @@
pw.print(paramName);
pw.print(',');
- MethodDescriptor.writeJavaType(pw, getJavaClass());
+ MethodDescriptor.writeJavaType(pw, _java_class);
pw.print(".class)");
}
@@ -1046,12 +1030,12 @@
pw.print('.');
pw.print("read_value");
pw.print('(');
- MethodDescriptor.writeJavaType(pw, getJavaClass());
+ MethodDescriptor.writeJavaType(pw, _java_class);
pw.print(".class)");
}
void addDependencies(Set<Class<?>> classes) {
- Class c = getJavaClass();
+ Class c = _java_class;
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 7d898c6..7004c25 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
@@ -26,7 +26,6 @@
import org.omg.CORBA.CompletionStatus;
import org.omg.CORBA.MARSHAL;
-import org.omg.CORBA.OBJECT_NOT_EXIST;
import org.omg.CORBA.ValueDefPackage.FullValueDescription;
import org.omg.SendingContext.RunTime;
@@ -173,7 +172,7 @@
if (val instanceof RMIStub) {
RMIStub stub = (RMIStub) val;
- Class type = stub._descriptor.getJavaClass();
+ Class type = stub._descriptor._java_class;
RMIState state = RMIState.current();
Stub result = state.getStaticStub(stub._get_codebase(), type);