开始使用 Jackrabbit 2.6.3 和 commons httpclient 3。
我编写了一个简单的 webDav 客户端来将文件上传到服务器,并希望针对 jackrabbit 的独立服务器的默认存储库对其进行测试。只是我只想在默认存储库中放置一个文件。
我的 httpclient 连接并且该方法开始缓冲我的文件。麻烦的是,我似乎无法使用我应该将我的 http 方法指向的 URL 以正确地将其放入存储库中。独立服务器正在运行:
http://localhost:8080.
对于我尝试过的所有 url,我似乎要么得到 405 PUT 不支持,要么得到 404 或 403,或者更奇怪的“存储库 '/' 不以 '/default' 开头。如果我可以看到默认存储库内容将我的浏览器指向:
http://localhost:8080/repository/default/
简单地说,我的问题是,使用 PutMethod 执行此操作的 url 是什么?听起来很简陋。
我已经为我编写的类包含了一些截断的代码,特别是我目前正在使用的方法,我认为这足以证明我的方法是正确的。
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();
}
}
我敢肯定这是一个简单的答案,但是拖网文档似乎没有显示任何与此相关的资源或教程。任何帮助表示赞赏。