[ 
https://issues.apache.org/jira/browse/IVY-885?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jim Bonanno updated IVY-885:
----------------------------

    Description: 
Sorry to have two url issues in one day. 

We are using ivy's ranges to resolve our modules. Ivy first tries to see if the 
specified version exists before listing the repository. The issue that we hit 
was when using the range [1,2[. The first request is 
http://myhost/my-repo/org/module/ivys/ivy-[1,2[.xml.

This URL is not properly escaped, but apache apparently is very forgiving. When 
we hosted the ivy repository with another web server that validated the urls 
the returned status code was not a 404.

We are working around the problem by again using URI to build the URL so it 
gets properly escaped. There seems to be some tricks to using the URI class. 
For example, the constructor that takes a string requires the string is already 
rfc 2396 compliant. The other constructors will actually escape the URL.

Here is the modifications we made to the BasicURLHandler.

        if ( url.getProtocol().equals("http") || 
url.getProtocol().equals("https"))  {
            try {
                URI uri = new URI(url.getProtocol(), null, url.getHost(), 
url.getPort(), url.getPath(), null, null);
                url = uri.toURL();
            }
            catch ( URISyntaxException e ) {
                IOException ioe = new IOException("Couldn't open connection to 
'" + url.toString() + "'");
                ioe.initCause(e);
                throw ioe;
            }
        }
        con = url.openConnection();

which results in a request 
http://myhost/my-repo/org/module/ivys/ivy-%5B1,2%5B.xml.

  was:
Sorry to have two url issues in one day. 

We are using ivy's ranges to resolve our modules. Ivy first tries to see if the 
specified version exists before listing the repository. The issue that we hit 
was when using the range [1,2[. The first request is 
http://myhost/my-repo/org/module/ivys/ivy-[1,2[.xml.

This URL is not properly escaped, but apache apparently is very forgiving. When 
we hosted the ivy repository with another web server that validated the urls 
the returned status code was not a 404.

We are working around the problem by again using URI to build the URL so it 
gets properly escaped. There seems to be some tricks to using the URI class. 
For example, the constructor that takes a string requires the string is already 
rfc 2396 compliant. The other constructors will actually escape the URL.

Here is the modifications we made to the BasicURLHandler.

        if ( url.getProtocol() == "http" || url.getProtocol() == "https") {
            try {
                URI uri = new URI(url.getProtocol(), null, url.getHost(), 
url.getPort(), url.getPath(), null, null);
                url = uri.toURL();
            }
            catch ( URISyntaxException e ) {
                IOException ioe = new IOException("Couldn't open connection to 
'" + url.toString() + "'");
                ioe.initCause(e);
                throw ioe;
            }
        }
        con = url.openConnection();

which results in a request 
http://myhost/my-repo/org/module/ivys/ivy-%5B1,2%5B.xml.


> Invalid URL when using dynamic ranges
> -------------------------------------
>
>                 Key: IVY-885
>                 URL: https://issues.apache.org/jira/browse/IVY-885
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0-beta-1
>            Reporter: Jim Bonanno
>
> Sorry to have two url issues in one day. 
> We are using ivy's ranges to resolve our modules. Ivy first tries to see if 
> the specified version exists before listing the repository. The issue that we 
> hit was when using the range [1,2[. The first request is 
> http://myhost/my-repo/org/module/ivys/ivy-[1,2[.xml.
> This URL is not properly escaped, but apache apparently is very forgiving. 
> When we hosted the ivy repository with another web server that validated the 
> urls the returned status code was not a 404.
> We are working around the problem by again using URI to build the URL so it 
> gets properly escaped. There seems to be some tricks to using the URI class. 
> For example, the constructor that takes a string requires the string is 
> already rfc 2396 compliant. The other constructors will actually escape the 
> URL.
> Here is the modifications we made to the BasicURLHandler.
>         if ( url.getProtocol().equals("http") || 
> url.getProtocol().equals("https"))  {
>             try {
>                 URI uri = new URI(url.getProtocol(), null, url.getHost(), 
> url.getPort(), url.getPath(), null, null);
>                 url = uri.toURL();
>             }
>             catch ( URISyntaxException e ) {
>                 IOException ioe = new IOException("Couldn't open connection 
> to '" + url.toString() + "'");
>                 ioe.initCause(e);
>                 throw ioe;
>             }
>         }
>         con = url.openConnection();
> which results in a request 
> http://myhost/my-repo/org/module/ivys/ivy-%5B1,2%5B.xml.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to