You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by zh...@apache.org on 2009/07/22 09:34:22 UTC

svn commit: r796623 - in /harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni: internal/net/www/protocol/jar/JarURLConnection.java util/Util.java

Author: zhoukevin
Date: Wed Jul 22 07:34:18 2009
New Revision: 796623

URL: http://svn.apache.org/viewvc?rev=796623&view=rev
Log:
Fix a test failure of JarURLConnectionTest for z/OS. The file name in private method of org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection.openJarFile() should be decoded using "UTF-8" encoding.

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.java
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/Util.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.java?rev=796623&r1=796622&r2=796623&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/jar/JarURLConnection.java Wed Jul 22 07:34:18 2009
@@ -138,9 +138,9 @@
     JarFile openJarFile() throws IOException {
         JarFile jar = null;
         if (jarFileURL.getProtocol().equals("file")) { //$NON-NLS-1$
-            jar = new JarFile(new File(Util.decode(jarFileURL.getFile(), false)),
-                        true, ZipFile.OPEN_READ);
-        } else{
+            jar = new JarFile(new File(Util.decode(jarFileURL.getFile(), false,
+                    "UTF-8")), true, ZipFile.OPEN_READ);
+        } else {
             final InputStream is = jarFileURL.openConnection().getInputStream();
             try {
                 jar = AccessController

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/Util.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/Util.java?rev=796623&r1=796622&r2=796623&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/Util.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/Util.java Wed Jul 22 07:34:18 2009
@@ -20,6 +20,7 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.UTFDataFormatException;
+import java.io.UnsupportedEncodingException;
 import java.util.Calendar;
 import java.util.TimeZone;
 
@@ -267,38 +268,61 @@
 	 *            java.lang.String The encoded string.
 	 * @return java.lang.String The decoded version.
 	 */
-	public static String decode(String s, boolean convertPlus) {
-		if (!convertPlus && s.indexOf('%') == -1)
-			return s;
-		StringBuilder result = new StringBuilder(s.length());
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		for (int i = 0; i < s.length();) {
-			char c = s.charAt(i);
-			if (convertPlus && c == '+')
-				result.append(' ');
-			else if (c == '%') {
-				out.reset();
-				do {
-					if (i + 2 >= s.length())
-						throw new IllegalArgumentException(Msg.getString(
-								"K01fe", i));
-					int d1 = Character.digit(s.charAt(i + 1), 16);
-					int d2 = Character.digit(s.charAt(i + 2), 16);
-					if (d1 == -1 || d2 == -1)
-						throw new IllegalArgumentException(Msg.getString(
-								"K01ff", s.substring(i, i + 3), String
-										.valueOf(i)));
-					out.write((byte) ((d1 << 4) + d2));
-					i += 3;
-				} while (i < s.length() && s.charAt(i) == '%');
-				result.append(out.toString());
-				continue;
-			} else
-				result.append(c);
-			i++;
-		}
-		return result.toString();
-	}
+    public static String decode(String s, boolean convertPlus) {
+        return decode(s, convertPlus, null);
+    }
+
+    /**
+     * '%' and two following hex digit characters are converted to the
+     * equivalent byte value. All other characters are passed through
+     * unmodified. e.g. "ABC %24%25" -> "ABC $%"
+     * 
+     * @param s
+     *            java.lang.String The encoded string.
+     * @param encoding
+     *            the specified encoding
+     * @return java.lang.String The decoded version.
+     */
+    public static String decode(String s, boolean convertPlus, String encoding) {
+        if (!convertPlus && s.indexOf('%') == -1)
+            return s;
+        StringBuilder result = new StringBuilder(s.length());
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        for (int i = 0; i < s.length();) {
+            char c = s.charAt(i);
+            if (convertPlus && c == '+')
+                result.append(' ');
+            else if (c == '%') {
+                out.reset();
+                do {
+                    if (i + 2 >= s.length())
+                        throw new IllegalArgumentException(Msg.getString(
+                                "K01fe", i));
+                    int d1 = Character.digit(s.charAt(i + 1), 16);
+                    int d2 = Character.digit(s.charAt(i + 2), 16);
+                    if (d1 == -1 || d2 == -1)
+                        throw new IllegalArgumentException(Msg.getString(
+                                "K01ff", s.substring(i, i + 3), String
+                                        .valueOf(i)));
+                    out.write((byte) ((d1 << 4) + d2));
+                    i += 3;
+                } while (i < s.length() && s.charAt(i) == '%');
+                if (encoding == null) {
+                    result.append(out.toString());
+                } else {
+                    try {
+                        result.append(out.toString(encoding));
+                    } catch (UnsupportedEncodingException e) {
+                        throw new IllegalArgumentException(e);
+                    }
+                }
+                continue;
+            } else
+                result.append(c);
+            i++;
+        }
+        return result.toString();
+    }
 	
 	public static String toASCIILowerCase(String s) {
         int len = s.length();