Hi,

here is the announced patch for the client, that drops the use of
org.apache.util.HttpURL. Please test, as I may have missed something.

Ingo


Index: webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavFile.java
===================================================================
RCS file: 
/home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavFile.java,v
retrieving revision 1.1
diff -u -r1.1 WebdavFile.java
--- webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavFile.java       9 Jan 
2004 09:56:04 -0000       1.1
+++ webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavFile.java       16 Jan 
2004 16:33:22 -0000
@@ -71,7 +71,9 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import org.apache.util.HttpURL;
+import org.apache.commons.httpclient.HttpURL;
+import org.apache.commons.httpclient.URIException;
+import org.apache.commons.httpclient.util.URIUtil;
 
 /**
  * Implements a file for WebDav
@@ -93,7 +95,7 @@
    * @param parent directory
    * @param child element in parent
    */
-  public WebdavFile(WebdavFile parent, String child) throws MalformedURLException {
+  public WebdavFile(WebdavFile parent, String child) throws URIException {
     this(
       parent.getAbsolutePath() + davSeparator + child,
       parent.getUser(),
@@ -106,8 +108,8 @@
    * @param user user name
    * @param pass password
    */
-  public WebdavFile(String pathname, String user, String pass) throws 
MalformedURLException {
-    this(new URL(pathname), user, pass);
+  public WebdavFile(String pathname, String user, String pass) throws URIException {
+    this(new HttpURL(user, pass, null, -1, pathname));
   }
 
   /**
@@ -115,7 +117,7 @@
    * @param user user name
    * @param pass password
    */
-  public WebdavFile(URL url, String user, String pass) throws MalformedURLException {
+  public WebdavFile(URL url, String user, String pass) throws URIException {
     this(new HttpURL(user, pass, url.getHost(), url.getPort(), url.getPath()));
   }
   /**
@@ -124,15 +126,15 @@
    * @param user user name
    * @param pass password
    */
-  public WebdavFile(String parent, String child, String user, String pass) throws 
MalformedURLException {
+  public WebdavFile(String parent, String child, String user, String pass) throws 
URIException {
     this(parent + davSeparator + child, user, pass);
   }
 
   /**
    * @param httpUrl Webdav URL
    */
-  public WebdavFile(HttpURL httpUrl) {
-    super(httpUrl.getUnescapedHttpURL());
+  public WebdavFile(HttpURL httpUrl) throws URIException {
+    super(httpUrl.getURI());
     this.httpUrl = httpUrl;
   }
 
@@ -174,13 +176,13 @@
     return files;
   }
 
-  public String getUser() throws MalformedURLException {
+  public String getUser() throws URIException {
     if(relPath!=null)
       return null;
-    return httpUrl.getUserName();
+    return httpUrl.getUser();
   }
 
-  public String getPass() throws MalformedURLException {
+  public String getPass() throws URIException {
     if(relPath!=null)
       return null;
     return httpUrl.getPassword();
@@ -189,16 +191,31 @@
   public String getName() {
     if(relPath!=null)
       return relPath;
-    return httpUrl.getName();
+    String escapedPath = httpUrl.getEscapedPath();
+    String escapedName =
+        URIUtil.getName(escapedPath.endsWith("/")
+                        ? escapedPath.substring(0, escapedPath.length() - 1)
+                        : escapedPath);
+    try {
+        return URIUtil.decode(escapedName);
+    } catch (URIException e) {
+        return escapedName;
+    }
   }
 
   public String getParent() {
     if(relPath!=null)
       return null;
-    String parent = httpUrl.getParent();
-    if("/".equals(parent))
+    String escapedPath = httpUrl.getEscapedPath();
+    String parent = escapedPath.substring(
+        0, escapedPath.lastIndexOf('/', escapedPath.length() - 2) + 1);
+    if (parent.length() <= 1)
       return null;
-    return parent;
+    try {
+        return URIUtil.decode(parent);
+    } catch (URIException e) {
+        return parent;
+    }
   }
 
   public File getParentFile() {
@@ -207,8 +224,8 @@
       return null;
 
     try {
-      return new WebdavFile(getParent(), getUser(), getPass());
-    } catch(MalformedURLException e) {
+      return new WebdavFile(parent, getUser(), getPass());
+    } catch(URIException e) {
       throw new WebdavException(e);
     }
   }
@@ -216,7 +233,11 @@
   public String getPath() {
     if(relPath!=null)
       return relPath;
-    return httpUrl.getUnescapedHttpURL();
+    try {
+        return httpUrl.getURI();
+    } catch (URIException e) {
+        throw new WebdavException(e);
+    }
   }
 
   public boolean isAbsolute() {
@@ -242,7 +263,11 @@
   public URL toURL() throws MalformedURLException {
     if(relPath!=null)
       return null;
-    return httpUrl.toURL();
+    try {
+        return new URL(httpUrl.getURI());
+    } catch (URIException e) {
+        throw new MalformedURLException(e.getMessage());
+    }
   }
 
   public boolean canRead() {
@@ -481,7 +506,7 @@
   public String toString() {
     if(relPath!=null)
       return relPath;
-    return httpUrl.getUnescapedHttpURL();
+    return httpUrl.getEscapedURI();
   }
 
   public int compareTo(File pathname) {
Index: webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java
===================================================================
RCS file: 
/home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java,v
retrieving revision 1.1
diff -u -r1.1 WebdavResource.java
--- webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java   9 Jan 
2004 09:56:04 -0000       1.1
+++ webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResource.java   16 Jan 
2004 16:33:22 -0000
@@ -69,7 +69,6 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.text.DateFormat;
 import java.text.ParseException;
@@ -92,8 +91,9 @@
 import org.apache.commons.httpclient.methods.PutMethod;
 import org.apache.commons.httpclient.util.URIUtil;
 import org.apache.util.DOMUtils;
-import org.apache.util.HttpURL;
-import org.apache.util.HttpsURL;
+import org.apache.commons.httpclient.HttpURL;
+import org.apache.commons.httpclient.HttpsURL;
+import org.apache.commons.httpclient.URIException;
 import org.apache.util.WebdavStatus;
 import org.apache.webdav.lib.methods.AclMethod;
 import org.apache.webdav.lib.methods.AclReportMethod;
@@ -919,7 +919,7 @@
             boolean itself = false;
             String href = response.getHref();
             if (!href.startsWith("/"))
-                href = HttpURL.getEscapedPath(href);
+                href = URIUtil.getPath(href);
             String httpURLPath = httpURL.getEscapedPath();
             int compared = httpURLPath.compareTo(href);
             // Compare with the href path and requested-path itself.
@@ -958,7 +958,7 @@
             String displayName = workingResource.getDisplayName();
 
             if (displayName == null || displayName.trim().equals("")) {
-                displayName = HttpURL.getName(href);
+                displayName = getName(href);
             }
             if (!itself) {
                 String myURI = httpURL.getEscapedURI();
@@ -1086,7 +1086,7 @@
      *
      * @return true if the given httpURL is the client for this resource.
      */
-    protected synchronized boolean isTheClient() throws MalformedURLException {
+    protected synchronized boolean isTheClient() throws URIException {
 
         Credentials creds = client.getState().getCredentials(null,
                                                              client.getHost());
@@ -1288,9 +1288,9 @@
      * @return httpURL the http URL.
      */
     public HttpURL getHttpURLExceptForUserInfo()
-        throws MalformedURLException {
+        throws URIException {
 
-        return httpURL.getHttpURLExceptForUserInfo();
+        return new HttpURL(httpURL.getRawURI());
     }
 
 
@@ -1314,12 +1314,32 @@
 
     /**
      * Get the path part of this WebdavResource.
+     * If the decoding of the path fails, this method will not throw an
+     * exception but return the escaped path instead.
      *
      * @return the path for this WebdavResource.
+     * @see org.apache.commons.httpclient.HttpURL#getPath()
      * @see #setPath(java.lang.String)
      */
     public String getPath() {
-        return httpURL.getPath();
+        try {
+            return httpURL.getPath();
+        } catch (URIException e) {
+            return httpURL.getEscapedPath();
+        }
+    }
+
+
+    /**
+     * Get the name of this WebdavResource.
+     * If the decoding of the name fails, this method will not throw an
+     * exception but return the escaped name instead.
+     *
+     * @return the name of this WebdavResource.
+     * @see org.apache.commons.httpclient.HttpURL#getName()
+     */
+    public String getName() {
+        return getName(httpURL.getEscapedPath());
     }
 
 
@@ -1327,9 +1347,9 @@
      * Get the hostname of this WebdavResource.
      *
      * @return the hostname.
-     * @exception MalformedURLException
+     * @exception URIException
      */
-    public String getHost() throws MalformedURLException {
+    public String getHost() throws URIException {
         return httpURL.getHost();
     }
 
@@ -1337,7 +1357,7 @@
     /**
      * Set the userinfo part of this WebdavResource.
      *
-     * @exception MalformedURLException
+     * @exception HttpException
      * @exception IOException
      * @see #setHttpURL(HttpURL)
      * @see #setHttpURL(java.lang.String)
@@ -1346,7 +1366,7 @@
     public void setUserInfo(String userName, String password)
         throws HttpException, IOException {
 
-        httpURL.setUserInfo(userName, password);
+        httpURL.setUserinfo(userName, password);
         setHttpURL(httpURL);
     }
 
@@ -3783,8 +3803,8 @@
     public boolean lockMethod()
         throws HttpException, IOException {
 
-        String owner = (httpURL.getUserName() != null) ?
-            httpURL.getUserName() : defaultOwner;
+        String owner = (httpURL.getUser() != null) ?
+            httpURL.getUser() : defaultOwner;
 
         boolean result = lockMethod(httpURL.getPath(), owner, 120);
         if (result) refresh();
@@ -3826,8 +3846,8 @@
     public boolean lockMethod(String path)
         throws HttpException, IOException {
 
-        String owner = (httpURL.getUserName() != null) ?
-            httpURL.getUserName() : defaultOwner;
+        String owner = (httpURL.getUser() != null) ?
+            httpURL.getUser() : defaultOwner;
 
         return lockMethod(path, owner, 120);
     }
@@ -3904,8 +3924,8 @@
      */
     public boolean unlockMethod() throws HttpException, IOException {
 
-        String owner = (httpURL.getUserName() != null) ?
-            httpURL.getUserName() : defaultOwner;
+        String owner = (httpURL.getUser() != null) ?
+            httpURL.getUser() : defaultOwner;
 
         boolean result = unlockMethod(httpURL.getPath(), owner);
         if (result) refresh();
@@ -3925,8 +3945,8 @@
     public boolean unlockMethod(String path)
         throws HttpException, IOException {
 
-        String owner = (httpURL.getUserName() != null) ?
-            httpURL.getUserName() : defaultOwner;
+        String owner = (httpURL.getUser() != null) ?
+            httpURL.getUser() : defaultOwner;
 
         return unlockMethod(path, owner);
     }
@@ -4421,4 +4441,14 @@
         return method.getResponses();
     }
 
+
+    private static String getName(String uri) {
+        String escapedName = URIUtil.getName(
+            uri.endsWith("/") ? uri.substring(0, uri.length() - 1): uri);
+        try {
+            return URIUtil.decode(escapedName);
+        } catch (URIException e) {
+            return escapedName;
+        }
+    }
 }
Index: webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResources.java
===================================================================
RCS file: 
/home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResources.java,v
retrieving revision 1.1
diff -u -r1.1 WebdavResources.java
--- webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResources.java  9 Jan 
2004 09:56:04 -0000       1.1
+++ webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavResources.java  16 Jan 
2004 16:33:22 -0000
@@ -233,7 +233,7 @@
     public void addResource(WebdavResource resource) {
         String displayName = resource.getDisplayName();
         if (displayName == null || displayName.trim().equals("")) {
-            displayName = resource.getHttpURL().getName();
+            displayName = resource.getName();
         }
         hrefTable.put(displayName, resource);
     }
Index: webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavSession.java
===================================================================
RCS file: 
/home/cvs/jakarta-slide/webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavSession.java,v
retrieving revision 1.1
diff -u -r1.1 WebdavSession.java
--- webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavSession.java    9 Jan 
2004 09:56:04 -0000       1.1
+++ webdavclient/clientlib/src/java/org/apache/webdav/lib/WebdavSession.java    16 Jan 
2004 16:33:22 -0000
@@ -69,7 +69,7 @@
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpState;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.util.HttpURL;
+import org.apache.commons.httpclient.HttpURL;
 
 /**
  * This WebdavSession class is for the session management of WebDAV clients.
@@ -182,12 +182,11 @@
             // Set a state which allows lock tracking
             client.setState(new WebdavState());
             HostConfiguration hostConfig = client.getHostConfiguration();
-            hostConfig.setHost(httpURL.getHost(), httpURL.getPort(),
-                               httpURL.getScheme());
+            hostConfig.setHost(httpURL);
             if (proxyHost != null && proxyPort > 0)
                 hostConfig.setProxy(proxyHost, proxyPort);
 
-            String userName = httpURL.getUserName();
+            String userName = httpURL.getUser();
             if (userName != null && userName.length() > 0) {
                 String password = httpURL.getPassword();
                 HttpState clientState = client.getState();
Index: webdavclient/commandline/src/java/org/apache/webdav/cmd/Client.java
===================================================================
RCS file: 
/home/cvs/jakarta-slide/webdavclient/commandline/src/java/org/apache/webdav/cmd/Client.java,v
retrieving revision 1.1
diff -u -r1.1 Client.java
--- webdavclient/commandline/src/java/org/apache/webdav/cmd/Client.java 9 Jan 2004 
09:58:19 -0000       1.1
+++ webdavclient/commandline/src/java/org/apache/webdav/cmd/Client.java 16 Jan 2004 
16:33:22 -0000
@@ -80,7 +80,8 @@
 import java.util.Vector;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpStatus;
-import org.apache.util.HttpURL;
+import org.apache.commons.httpclient.HttpURL;
+import org.apache.commons.httpclient.util.URIUtil;
 import org.apache.util.QName;
 import org.apache.webdav.lib.Ace;
 import org.apache.webdav.lib.Lock;
@@ -299,7 +300,7 @@
 
         try {
             // Set up for processing WebDAV resources
-            httpURL = new HttpURL(uri);
+            httpURL = new HttpURL(uri.toCharArray());
             if (webdavResource == null) {
                 webdavResource = new WebdavResource(httpURL);
                 webdavResource.setDebug(debugLevel);
@@ -333,9 +334,9 @@
                         httpURL = null;
                         webdavResource = null;
                     }
-                    httpURL = new HttpURL(uri);
+                    httpURL = new HttpURL(uri.toCharArray());
                     // It should be used like this way.
-                    httpURL.setUserInfo(userName, password);
+                    httpURL.setUserinfo(userName, password);
                     webdavResource = new WebdavResource(httpURL);
                     webdavResource.setDebug(debugLevel);
                     setPath(webdavResource.getPath());
@@ -383,7 +384,7 @@
             boolean succeeded = false;
             if (param != null) {
                 if (!param.startsWith("/")) {
-                    httpURL = new HttpURL(param);
+                    httpURL = new HttpURL(param.toCharArray());
                     Enumeration enum = null;
                     try {
                         // OPTIONS business logic
@@ -413,7 +414,7 @@
                                     password= password.trim();
                                 try {
                                     // OPTIONS business logic
-                                    httpURL.setUserInfo(userName,
+                                    httpURL.setUserinfo(userName,
                                         password);
                                     enum = webdavResource.
                                         optionsMethod(httpURL);
@@ -770,7 +771,7 @@
             out.print("Putting property(" + name + ", " + value +
                 ") to '" + path + "': ");
             if (webdavResource.proppatchMethod(
-                path, new PropertyName("DAV:",name), value)) {
+                path, new PropertyName("DAV:",name), value, true)) {
                 out.println("succeeded.");
             } else {
                 out.println("failed.");
@@ -788,7 +789,11 @@
             // The resource on the remote.
             String src = checkUri(path);
             // The file on the local.
-            String dest = (filename!=null) ? filename : HttpURL.getName(src);
+            String dest = (filename!=null)
+                ? filename
+                : URIUtil.getName(src.endsWith("/")
+                                  ? src.substring(0, src.length() - 1)
+                                  : src);
 
             out.println("get " + src + " " + dest);
 
@@ -1203,11 +1208,11 @@
 
             if ((properties!=null) && (properties.size()>0)) {
                 propertyValues =
-                    webdavResource.reportMethod(new HttpURL(path), properties, 1);
+                    webdavResource.reportMethod(new HttpURL(path.toCharArray()), 
properties, 1);
             }
             else  {
                 propertyValues =
-                    webdavResource.reportMethod(new HttpURL(path), 1);
+                    webdavResource.reportMethod(new HttpURL(path.toCharArray()), 1);
             }
 
             if (propertyValues.hasMoreElements()){
@@ -1254,7 +1259,7 @@
             out.println("expand-property Report of '" + path + "':");
 
             Enumeration propertyValues =
-                webdavResource.reportMethod(new HttpURL(path), sQuery, 1);
+                webdavResource.reportMethod(new HttpURL(path.toCharArray()), sQuery, 
1);
             if (propertyValues.hasMoreElements()){
                 while (propertyValues.hasMoreElements()){
                     out.println(displayXML(propertyValues.nextElement().toString(), 
0));
@@ -1280,7 +1285,7 @@
             out.println("Getting version-tree Report of '" + path + "':");
 
             Enumeration propertyValues =
-                webdavResource.reportMethod(new HttpURL(path), properties, 
historyUris, 1);
+                webdavResource.reportMethod(new HttpURL(path.toCharArray()), 
properties, historyUris, 1);
             if (propertyValues.hasMoreElements()) {
                 while (propertyValues.hasMoreElements()) {
                     out.println(propertyValues.nextElement().toString());


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

Reply via email to