1 package org
.argeo
.cms
.dav
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
6 import java
.net
.http
.HttpClient
;
7 import java
.net
.http
.HttpRequest
;
8 import java
.net
.http
.HttpRequest
.BodyPublishers
;
9 import java
.net
.http
.HttpResponse
;
10 import java
.net
.http
.HttpResponse
.BodyHandler
;
11 import java
.net
.http
.HttpResponse
.BodyHandlers
;
12 import java
.util
.Iterator
;
14 import javax
.xml
.namespace
.QName
;
16 import org
.argeo
.util
.http
.HttpHeader
;
17 import org
.argeo
.util
.http
.HttpMethod
;
18 import org
.argeo
.util
.http
.HttpResponseStatus
;
20 public class DavClient
{
22 private HttpClient httpClient
;
25 httpClient
= HttpClient
.newBuilder() //
26 // .sslContext(insecureContext()) //
27 .version(HttpClient
.Version
.HTTP_1_1
) //
28 // .authenticator(new Authenticator() {
31 // protected PasswordAuthentication getPasswordAuthentication() {
32 // return new PasswordAuthentication("root", "demo".toCharArray());
39 public void setProperty(String url
, QName key
, String value
) {
42 <?xml version="1.0" encoding="utf
-8" ?>
43 <D:propertyupdate xmlns:D="DAV
:"
45 + "xmlns:" + key
.getPrefix() + "=\"" + key
.getNamespaceURI() + "\">" + //
50 + "<" + key
.getPrefix() + ":" + key
.getLocalPart() + ">" + value
+ "</" + key
.getPrefix() + ":"
51 + key
.getLocalPart() + ">" + //
57 System
.out
.println(body
);
58 HttpRequest request
= HttpRequest
.newBuilder().uri(URI
.create(url
)) //
59 .header(HttpHeader
.DEPTH
.getHeaderName(), DavDepth
.DEPTH_1
.getValue()) //
60 .method(HttpMethod
.PROPPATCH
.name(), BodyPublishers
.ofString(body
)) //
62 BodyHandler
<String
> bodyHandler
= BodyHandlers
.ofString();
63 HttpResponse
<String
> response
= httpClient
.send(request
, bodyHandler
);
64 System
.out
.println(response
.body());
65 } catch (IOException
| InterruptedException e
) {
66 // TODO Auto-generated catch block
71 public Iterator
<DavResponse
> listChildren(URI uri
) {
74 <?xml version="1.0" encoding="utf
-8" ?>
75 <D:propfind xmlns:D="DAV
:">
78 HttpRequest request
= HttpRequest
.newBuilder().uri(uri
) //
79 .header(HttpHeader
.DEPTH
.getHeaderName(), DavDepth
.DEPTH_1
.getValue()) //
80 .method(HttpMethod
.PROPFIND
.name(), BodyPublishers
.ofString(body
)) //
83 HttpResponse
<String
> responseStr
= httpClient
.send(request
, BodyHandlers
.ofString());
84 System
.out
.println(responseStr
.body());
86 HttpResponse
<InputStream
> response
= httpClient
.send(request
, BodyHandlers
.ofInputStream());
87 MultiStatusReader msReader
= new MultiStatusReader(response
.body(), uri
.getPath());
89 } catch (IOException
| InterruptedException e
) {
90 throw new IllegalStateException("Cannot list children of " + uri
, e
);
95 public boolean exists(URI uri
) {
97 HttpRequest request
= HttpRequest
.newBuilder().uri(uri
) //
98 .header(HttpHeader
.DEPTH
.getHeaderName(), DavDepth
.DEPTH_0
.getValue()) //
99 .method(HttpMethod
.HEAD
.name(), BodyPublishers
.noBody()) //
101 BodyHandler
<String
> bodyHandler
= BodyHandlers
.ofString();
102 HttpResponse
<String
> response
= httpClient
.send(request
, bodyHandler
);
103 System
.out
.println(response
.body());
104 int responseStatusCode
= response
.statusCode();
105 if (responseStatusCode
== HttpResponseStatus
.NOT_FOUND
.getCode())
107 if (responseStatusCode
>= 200 && responseStatusCode
< 300)
109 throw new IllegalStateException(
110 "Cannot check whether " + uri
+ " exists: Unknown response status code " + responseStatusCode
);
111 } catch (IOException
| InterruptedException e
) {
112 throw new IllegalStateException("Cannot check whether " + uri
+ " exists", e
);
117 public DavResponse
get(URI uri
) {
120 <?xml version="1.0" encoding="utf
-8" ?>
121 <D:propfind xmlns:D="DAV
:">
124 HttpRequest request
= HttpRequest
.newBuilder().uri(uri
) //
125 .header(HttpHeader
.DEPTH
.getHeaderName(), DavDepth
.DEPTH_0
.getValue()) //
126 .method(HttpMethod
.PROPFIND
.name(), BodyPublishers
.ofString(body
)) //
129 // HttpResponse<String> responseStr = httpClient.send(request, BodyHandlers.ofString());
130 // System.out.println(responseStr.body());
132 HttpResponse
<InputStream
> response
= httpClient
.send(request
, BodyHandlers
.ofInputStream());
133 MultiStatusReader msReader
= new MultiStatusReader(response
.body());
134 if (!msReader
.hasNext())
135 throw new IllegalArgumentException(uri
+ " does not exist");
136 return msReader
.next();
137 } catch (IOException
| InterruptedException e
) {
138 throw new IllegalStateException("Cannot list children of " + uri
, e
);
143 public static void main(String
[] args
) {
144 DavClient davClient
= new DavClient();
145 // Iterator<DavResponse> responses = davClient
146 // .listChildren(URI.create("http://localhost/unstable/a2/org.argeo.tp.sdk/"));
147 Iterator
<DavResponse
> responses
= davClient
148 .listChildren(URI
.create("http://root:demo@localhost:7070/api/acr/srv/example"));
149 while (responses
.hasNext()) {
150 DavResponse response
= responses
.next();
151 System
.out
.println(response
.getHref() + (response
.isCollection() ?
" (collection)" : ""));
152 System
.out
.println(" " + response
.getPropertyNames());
155 // davClient.setProperty("http://localhost/unstable/a2/org.argeo.tp.sdk/org.opentest4j.1.2.jar",
156 // CrName.uuid.qName(), UUID.randomUUID().toString());