Strange getChildResources() behaviour

David King <[email protected]> Sun, 25 Mar 2007 20:23:15 -0700
Newsgroups gmane.comp.jakarta.slide.user
Message-ID <[email protected]>
I have a small program which tries to list an entire collection tree  
by recursion (it's a smaller part of a larger program). In theory  
this should be pretty easy. The tree looks like this (where a  
trailing slash denotes a collection):

dir/1/
dir/1/2
dir/3/
dir/3/4/
dir/5
dir/6

However, when I try to do getChildResources() on "dir", instead of  
getting back {1,3,5,6}, instead I get back {dir,5,6}. That is,  
getChildResources() returns the original resource, and any files (but  
not collections) within the collection. Slide is the only library  
that seems to do this, so I'm inclined to believe that it's a bug  
(either in Slide or the server), but I'm hoping that I'm just doing  
something wrong. I'm doing this from Slide 2.1, talking to a Xythos  
6.0 server (www.xythosondemand.com, but I've tried another Xythos  
server as well).

Here's the actual code:

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpURL;
import org.apache.commons.httpclient.HttpsURL;
import org.apache.commons.httpclient.URIException;
import org.apache.webdav.lib.WebdavResource;
import org.apache.webdav.lib.WebdavResources;

public class Davsync {
   private static final String URL="https://server/path/to/collection/";
   private static final String source="/local/path";
   private static final String user="username";
   private static final String password = "password";

   public static void main(String[] args) throws URIException,  
IOException {
     HttpsURL hrl=new HttpsURL(URL);
     hrl.setUserinfo(user, password);

     syncUp(hrl, new File(source));
   }

   private static void syncUp(HttpURL hu, File localFile) throws  
HttpException, IOException {
     syncUp(
         new WebdavResource(hu).getChildResources(),
         localFile);
   }

   private static void syncUp(WebdavResources wrs, File localfile)  
throws IOException {
     Enumeration wr=wrs.getResources();
     while(wr.hasMoreElements()) {
       WebdavResource r=(WebdavResource)wr.nextElement();

       if(r.isCollection()) {
         System.out.println("Dire:" + r.toString());
         // syncUp(r.listWebdavResources(),localfile);
       } else {
         System.out.println("File:" + r.toString());
       }
     }
   }
}