Hi Oleg

Oleg Kalnichevski schrieb:
Is java.net.URI.resolve(String str) being used anywhere in HttpClient?

Yep, o.a.h..impl.client.DefaultRedirectHandler method getLocationURI.

If so, what do you suggest we do?

Create a resolve(URI, String) method in o.a.h.client.utils.URLUtils? See attached patch.

<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708535> suggests:

Specially check for this case in invoking code,
replace "" by "#" and then remove "#" manually later.
(Review ID: 148122)

--
Johannes Koch
BIKA Web Compliance Center - Fraunhofer FIT
Schloss Birlinghoven, D-53757 Sankt Augustin, Germany
Phone: +49-2241-142628    Fax: +49-2241-142065
Index: C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/impl/client/DefaultRedirectHandler.java
===================================================================
--- C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/impl/client/DefaultRedirectHandler.java
        (revision 630775)
+++ C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/impl/client/DefaultRedirectHandler.java
        (working copy)
@@ -138,7 +138,7 @@
             try {
                 URI requestURI = new URI(request.getRequestLine().getUri());
                 URI absoluteRequestURI = URLUtils.rewriteURI(requestURI, 
target, true);
-                uri = absoluteRequestURI.resolve(uri); 
+                uri = URLUtils.resolve(absoluteRequestURI, uri); 
             } catch (URISyntaxException ex) {
                 throw new ProtocolException(ex.getMessage(), ex);
             }
Index: C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
===================================================================
--- C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
     (revision 630775)
+++ C:/Dokumente und Einstellungen/Koch/Eigene 
Dateien/koch/opt/eclipse/workspace_p/httpclient_trunk/module-client/src/main/java/org/apache/http/client/utils/URLUtils.java
     (working copy)
@@ -195,6 +195,45 @@
     }
     
     /**
+     * Resolves a URI reference aginast a base URI. Work-around for bug in
+     * java.net.URI 
(<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708535>)
+     *  
+     * @param baseURI the base URI
+     * @param reference the URI reference
+     * @return the resulting URI
+     */
+    public static URI resolve(URI baseURI, String reference)
+    {
+        return URLUtils.resolve(baseURI, URI.create(reference));
+    }
+
+    /**
+     * Resolves a URI reference aginast a base URI. Work-around for bug in
+     * java.net.URI 
(<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708535>)
+     *  
+     * @param baseURI the base URI
+     * @param reference the URI reference
+     * @return the resulting URI
+     */
+    public static URI resolve(URI baseURI, URI reference)
+    {
+        boolean emptyReference = "".equals(reference.toString());
+        if (emptyReference)
+        {
+            reference = URI.create("#");
+        }
+        URI resolved = baseURI.resolve(reference);
+        if (emptyReference)
+        {
+            String resolvedString = resolved.toString();
+            resolved = URI.create(resolvedString.substring(0,
+                resolvedString.indexOf('#')));
+        }
+        return resolved;
+    }
+
+    
+    /**
      * This class should not be instantiated.
      */
     private URLUtils() {

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to