Thanks for the update Michal.

It is nice to know that even though this was not our bug we were able to help diagnose the problem.

-Chris.

Michal Vyskocil wrote:
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

Reply via email to