src/share/classes/com/sun/jndi/ldap/Obj.java

Print this page

        

@@ -36,17 +36,15 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.ObjectStreamClass;
 import java.io.InputStream;
 
+import java.util.Base64;
 import java.util.Hashtable;
 import java.util.Vector;
 import java.util.StringTokenizer;
 
-import sun.misc.BASE64Encoder;
-import sun.misc.BASE64Decoder;
-
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Modifier;
 
 /**
   * Class containing static methods and constants for dealing with

@@ -322,27 +320,30 @@
 
         if (count > 0) {
 
             Attribute refAttr = new BasicAttribute(JAVA_ATTRIBUTES[REF_ADDR]);
             RefAddr refAddr;
-            BASE64Encoder encoder = null;
+            Base64.Encoder encoder = null;
 
             for (int i = 0; i < count; i++) {
                 refAddr = ref.get(i);
 
                 if (refAddr instanceof StringRefAddr) {
                     refAttr.add(""+ separator + i +
                         separator +     refAddr.getType() +
                         separator + refAddr.getContent());
                 } else {
                     if (encoder == null)
-                        encoder = new BASE64Encoder();
+                        encoder = Base64.getMimeEncoder();
 
+                    // Base64.Encoder.encode method is used instead of
+                    // encodeToString method to ensure Java object in LDAP
+                    // is encoded with the same scheme as previous releases.
                     refAttr.add(""+ separator + i +
                         separator + refAddr.getType() +
                         separator + separator +
-                        encoder.encodeBuffer(serializeObject(refAddr)));
+                        new String(encoder.encode(serializeObject(refAddr))));
                 }
             }
             attrs.put(refAttr);
         }
         return attrs;

@@ -401,11 +402,11 @@
         if ((attr = attrs.get(JAVA_ATTRIBUTES[REF_ADDR])) != null) {
 
             String val, posnStr, type;
             char separator;
             int start, sep, posn;
-            BASE64Decoder decoder = null;
+            Base64.Decoder decoder = null;
 
             ClassLoader cl = helper.getURLClassLoader(codebases);
 
             /*
              * Temporary Vector for decoded RefAddr addresses - used to ensure

@@ -470,15 +471,17 @@
 
                     ++start;  // skip over consecutive separator
                     // %%% RL: exception if empty after double separator
 
                     if (decoder == null)
-                        decoder = new BASE64Decoder();
+                        decoder = Base64.getMimeDecoder();
 
+                    // Java object in LDAP was encoded with the platform
+                    // default charset.
                     RefAddr ra = (RefAddr)
                         deserializeObject(
-                            decoder.decodeBuffer(val.substring(start)),
+                            decoder.decode(val.substring(start).getBytes()),
                             cl);
 
                     refAddrList.setElementAt(ra, posn);
                 } else {
                     // Single separator indicates a StringRefAddr