Symbol ``['' and a java.net.URI.create method

Michal Vyskocil mvyskocil at suse.cz
Sat May 10 05:29:18 PDT 2008


On Tuesday 29 April 2008 18:21:43 Christopher Hegarty - Sun Microsystems 
Ireland wrote:
> The square bracket characters ('[' and ']') are reserved characters
> in a URI. If they are to be used then they need to percent encoded.
> That is, '[' is percent encoded to be %5B.
>
> The single argument java.net.URI constructor requires any illegal
> characters in its argument to be quoted and preserves any escaped
> octets and other characters that are present. The static create
> method simply invokes the URI(String) constructor, with some extra
> Exception handling. Therefore any reserved characters need to be
> percent encoded before passing the String as an argument.
>
> You can look at the java.net.URI class description to give you a
> better understanding of how this encoding works.

Hi Chriss,

thanks for your response. There problem was in ant. There are two bugs - 
missing encodeUri and a decodeUri calls in a 
org.apache.tools.ant.launch.Locator.createUri - both was fixed in 
upstream - r539002 and r533024.

For ant 1.7.0 is this simple patch, just 

--- src/main/org/apache/tools/ant/launch/Locator.java
+++ src/main/org/apache/tools/ant/launch/Locator.java
@@ -159,11 +159,14 @@
             try {
                 java.lang.reflect.Method createMethod
                     = uriClazz.getMethod("create", new Class[] 
{String.class});
-                Object uriObj = createMethod.invoke(null, new Object[] 
{uri});
+                // encode URI first - to handle [] characters used in a
+                // build-jar-repository in jpackage project
+                Object uriObj = createMethod.invoke(null, new Object[] 
{encodeURI(uri)});
                 java.lang.reflect.Constructor fileConst
                     = File.class.getConstructor(new Class[] 
{uriClazz});
                 File f = (File) fileConst.newInstance(new Object[] 
{uriObj});
-                return f.getAbsolutePath();
+                //bug #42227 (Apache bugzilla) forgot to decode before 
returning
+                return decodeUri(f.getAbsolutePath());
             } catch (java.lang.reflect.InvocationTargetException e) {
                 Throwable e2 = e.getTargetException();
                 if (e2 instanceof IllegalArgumentException) {

Thanks for help!

Regards
Michal Vyskocil



More information about the net-dev mailing list