GERONIMOTCK-142 Transform repository ID names to valid ones
git-svn-id: https://svn.apache.org/repos/asf/geronimo/yoko/trunk@1365466 13f79535-47bb-0310-9956-ffa450edef68
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 3abc6d2..cb8e99a 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
@@ -37,6 +37,7 @@
import java.util.logging.Logger;
import java.util.logging.Level;
+import org.apache.yoko.rmi.util.StringUtil;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.TypeCode;
import org.omg.CORBA.ValueMember;
@@ -101,7 +102,7 @@
public String getRepositoryID() {
if (_repid == null) {
StringBuffer buf = new StringBuffer("RMI:");
- buf.append(getJavaClass().getName());
+ buf.append(StringUtil.convertToValidIDLNames(getJavaClass().getName()));
buf.append(":");
String hashCode = Long.toHexString(_hash_code).toUpperCase();
@@ -823,6 +824,8 @@
// read custom marshalling value header
byte streamFormatVersion = reader.readByte();
boolean writeDefaultStateCalled = reader.readBoolean();
+ logger.log(Level.FINE, "Reading value in streamFormatVersion=" + streamFormatVersion
+ + " IsCalleddefaultWriteObject=" + writeDefaultStateCalled);
}
if (_read_object_method != null) {
diff --git a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/util/StringUtil.java b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/util/StringUtil.java
index c59afe4..2eebc67 100755
--- a/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/util/StringUtil.java
+++ b/yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/util/StringUtil.java
@@ -73,4 +73,71 @@
return result.toString();
}
+
+ public static final byte[] HEX_CHARS = {
+ (byte)'0',
+ (byte)'1',
+ (byte)'2',
+ (byte)'3',
+ (byte)'4',
+ (byte)'5',
+ (byte)'6',
+ (byte)'7',
+ (byte)'8',
+ (byte)'9',
+ (byte)'A',
+ (byte)'B',
+ (byte)'C',
+ (byte)'D',
+ (byte)'E',
+ (byte)'F',
+ };
+
+ public static final byte[] VALID_IDL_CHARS = {
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0,
+ 1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0,
+ 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,1,
+ 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1,
+ 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
+ 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1,
+ 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1,
+ 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1,
+ 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1,
+ };
+
+ public static String convertToValidIDLNames(String str) {
+
+ int length = str.length();
+ if (length == 0) {
+ return str;
+ }
+
+ StringBuilder builder = new StringBuilder();
+
+ for (char c : str.toCharArray()) {
+ if (c > 255 || VALID_IDL_CHARS[c] == 0) {
+ builder.append("\\U" +
+ (char)HEX_CHARS[(c & 0xF000) >>> 12] +
+ (char)HEX_CHARS[(c & 0x0F00) >>> 8] +
+ (char)HEX_CHARS[(c & 0x00F0) >>> 4] +
+ (char)HEX_CHARS[(c & 0x000F)] );
+ } else {
+ builder.append(c);
+ }
+ }
+
+ if (builder.length() > 0) {
+ str = builder.toString();
+ }
+
+ return str;
+ }
+
}