2012-07-03 4 views
0

Pour tenter de contourner les ID de fichier/dossier Box et de prendre en charge un certain nombre d'autres services, j'ai décidé d'utiliser WebDAV car je connais un peu Linux. J'ai choisi une librairie basée sur JackRabbit modifiée pour fonctionner sur Android qui semblait convenir à mes besoins. Cependant, il ne fallut pas longtemps avant que je rencontre un problème.PROPFIND Box.com et WebDav (JackRabbit)

Lorsque vous tentez de lister les entrées racine de Box, multiStatus.getResponses() renvoie un tableau vide. Lorsque j'accède à un autre serveur webdav, j'obtiens les réponses comme prévu. Les deux serveurs renvoient le code d'état 207, comme prévu.

Mon code est ci-dessous, des pensées?

EDIT: Je peux déplacer un fichier, bien que la liste des entrées d'un répertoire ne fonctionnera pas:/

  String host = "https://www.box.com/dav/"; 
      //String host = "http://demo.sabredav.org/"; 
      hostConfig = new HostConfiguration(); 
      hostConfig.setHost(host); 
      HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); 
      HttpConnectionManagerParams params = new HttpConnectionManagerParams(); 
      int maxHostConnections = 20; 
      params.setMaxConnectionsPerHost(hostConfig, maxHostConnections); 
      connectionManager.setParams(params);  
      client = new HttpClient(connectionManager); 
      Credentials creds = new UsernamePasswordCredentials("BOXEMAILADDRESS", "MYBOXPASSWORD"); 
      //Credentials creds = new UsernamePasswordCredentials("testuser", "test"); 
      client.getState().setCredentials(AuthScope.ANY, creds); 
      client.setHostConfiguration(hostConfig); 
      try 
      { 
       String propfindUri = host; 
       DavMethod method = new PropFindMethod(propfindUri, DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1); 
       client.executeMethod(method); 
       Log.i("Status: " + method.getStatusCode()); 
       MultiStatus multiStatus = method.getResponseBodyAsMultiStatus(); 
       MultiStatusResponse[] responses = multiStatus.getResponses(); 
       Log.i("Length: " + responses.length); 
       for(MultiStatusResponse response : responses) 
       { 
        Log.i("File: " + response.getHref()); 
       } 
      } 
      catch (Exception e) 
      { 
       Log.printStackTrace(e); 
      } 
+0

Obtenez une trace HTTP. –

+0

Je rencontre également des problèmes avec les résultats de la liste de WebDAV de Box.com. J'utilise DAVKit sur iOS, ce qui fonctionne bien avec iDisk et d'autres services, mais Box renvoie un PROPFIND vide, quelle que soit la combinaison de chemin et d'URL que j'ai essayée ... – DaGaMs

Répondre

1

Alors Box a un certain soutien pour WebDAV, nous ne supportons officiellement pour iOS au moment . Nos tests ont montré que notre implémentation de DAV fonctionne plutôt bien avec le client DAV natif Windows, ainsi qu'avec le client spécifique à Panic-Transmit Mac. Bien que les interactions ne soient pas complètement parfaites. Box WebDAV ne fonctionne pas bien avec le client webDAV osX (Mac) natif. Attendez-vous à d'énormes retards car il semble que ce client essaie de charger l'intégralité de l'arborescence avant d'afficher quoi que ce soit.

Les utilisateurs de Linux peuvent vous dire ici sur StackTrace quels sont les différents clients/librairies WebDAV qu'ils ont essayés et lesquels ont mieux fonctionné que d'autres. Nous prévoyons d'améliorer notre support WebDAV plus tard dans l'année, mais nous n'avons pas de date précise, et la nature des clients WebDAV est telle que même si nous corrigeons beaucoup de problèmes avec cela, certaines expériences client sur webDAV peuvent encore être nulles. Pour cette raison, nous ne pouvons qu'approuver officiellement quelques clients/bibliothèques WebDAV par plate-forme.

Espérons que ça aide.