Apache Jackrabbit webDAV PUT方法。

时间:2013-10-24 12:51:41

标签: java apache webdav jackrabbit

开始使用Jackrabbit 2.6.3和commons httpclient 3.

我编写了一个简单的webDav客户端来将文件上传到服务器,并希望根据jackrabbit的独立服务器的默认存储库进行测试。我只想将文件放在默认存储库中。

我的httpclient连接,该方法开始缓冲我的文件。麻烦的是,我似乎无法工作什么URL我应该指向我的http方法,以正确地将它放在存储库中。独立服务器正在运行:

http://localhost:8080.

我似乎要么不支持405 PUT,要么得到404或403,或者对于我尝试过的所有网址,更加好奇的“存储库”/'不以'/ default'开头。我可以看到默认存储库如果我将浏览器指向以下内容:

http://localhost:8080/repository/default/ 

简单来说,我的问题是,使用PutMethod做什么的网址是什么?听起来很简陋。

我已经为我编写的类包含了一些截断的代码,特别是我目前使用的方法,我认为应该足以证明我的方法是正确的。

public void insertFile(byte[] content, String id) throws Exception {
    PutMethod httpMethod = new PutMethod("http://localhost:8080/repository/default/");
    InputStream is = new ByteArrayInputStream(content);
    FileMetaData meta = new FileMetaData();
    meta.address = destUri;
    meta.id = id;
    meta.mimeType = Files.probeContentType(Paths.get(meta.address));
    RequestEntity requestEntity = new InputStreamRequestEntity(is, meta.mimeType);
    httpMethod.setRequestEntity(requestEntity);
    try {
        int statusCode = client.executeMethod(httpMethod);
        if (statusCode != HttpStatus.SC_OK) System.err.println("Method failed: " + httpMethod.getStatusLine());
        byte[] responseBody = httpMethod.getResponseBody();
        System.out.println(new String(responseBody));
    } catch (HttpException e) {
        System.err.println("Fatal protocol violation: " + e.getMessage());
        e.printStackTrace();
    } catch (IOException e) {
        System.err.println("Fatal transport error: " + e.getMessage());
        e.printStackTrace();
    } finally {
        httpMethod.releaseConnection();
    }

}

我确信这是一个简单的答案,但是搜索文档似乎没有显示任何与此相关的资源或教程。任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

真的很傻,完全以为requestEntity会在文件上发送一些数据并将其用作文件名,而是我必须自己指定。 PROTIP:离开电脑5到10分钟。对于我的问题的任何其他人,它应该是'“yourUrl / repository / default”+ fileName'。简单。