make code compilable
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/AbstractWebdavMethod.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/AbstractWebdavMethod.java
index e5a02e2..1fea3ab 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/AbstractWebdavMethod.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/AbstractWebdavMethod.java
@@ -6,6 +6,7 @@
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.Builder;
import java.net.http.HttpResponse;
+import java.net.http.HttpResponse.BodySubscriber;
import java.net.http.HttpResponse.BodySubscribers;
import java.net.http.HttpResponse.ResponseInfo;
import java.util.Optional;
@@ -38,24 +39,15 @@
* @throws MultiStatusDavResponseException in case of a multi status response
* @throws DavResponseException in case of a non-success status code
*/
- protected HttpResponse.BodyHandler<Void> newMultiStatusAwareBodyHandler() {
- return newMultiStatusAwareBodyHandler(responseInfo -> {});
- }
-
- /**
- * Parses the response in case of non-success status code and throws an exception.
- * Also potentially parses multi status response bodies and wraps them in a {@link MultiStatusDavResponseException}.
- * @throws MultiStatusDavResponseException in case of a multi status response
- * @throws DavResponseException in case of a non-success status code
- */
- protected HttpResponse.BodyHandler<T> newMultiStatusAwareBodyHandler(Function<ResponseInfo, T> responseInfoConsumer) {
+ // TODO: pass subscriber (no access to response headers)?
+ protected HttpResponse.BodyHandler<T> newMultiStatusAwareBodyHandler() {
return (responseInfo) -> {
if (succeeded(responseInfo.statusCode())) {
- T response = responseInfoConsumer.apply(null);
- return BodySubscribers.replacing(response);
+ // TODO: method specific evaluation of both headers and body
+ return (BodySubscriber<T>) BodySubscribers.discarding();
} else if (responseInfo.statusCode() == DavServletResponse.SC_MULTI_STATUS) {
// TODO: evaluate multi status response body also for successful status codes?
- return BodySubscribers.ofByteArrayConsumer(AbstractWebdavMethod::evaluateMultiStatusResponseBody);
+ return (BodySubscriber<T>) BodySubscribers.ofByteArrayConsumer(AbstractWebdavMethod::evaluateMultiStatusResponseBody);
} else {
throw new DavResponseException(responseInfo.statusCode(), "Unexpected status code: ");
}
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/DavBodyHandlers.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/DavBodyHandlers.java
index 1792346..6bb3fe7 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/DavBodyHandlers.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/DavBodyHandlers.java
@@ -19,53 +19,38 @@
import org.apache.jackrabbit.webdav.DavConstants;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.MultiStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
/**
* Factory methods for HTTP response body handlers. Body handlers are used to process the body of an HTTP response.
+ * @see {@link BodyHandler}
*/
public class DavBodyHandlers {
-
-
- /**
- * Returns a {@code BodyHandler<Path>} that returns a
- * {@link BodySubscriber BodySubscriber}{@code <Path>} obtained from
- * {@link BodySubscribers#ofFile(Path, OpenOption...)
- * BodySubscribers.ofFile(Path,OpenOption...)}.
- *
- * <p> When the {@code HttpResponse} object is returned, the body has
- * been completely written to the file, and {@link #body()} returns a
- * reference to its {@link Path}.
- *
- * <p> Security manager permission checks are performed in this factory
- * method, when the {@code BodyHandler} is created. Care must be taken
- * that the {@code BodyHandler} is not shared with untrusted code.
- *
- * @param file the file to store the body in
- * @param openOptions any options to use when opening/creating the file
- * @return a response body handler
- * @throws IllegalArgumentException if an invalid set of open options
- * are specified
- * @throws SecurityException If a security manager has been installed
- * and it denies {@link SecurityManager#checkWrite(String)
- * write access} to the file.
- */
+
+ private static final Logger LOG = LoggerFactory.getLogger(DavBodyHandlers.class);
+
+ private DavBodyHandlers() {
+ // prevent instantiation
+ }
+
public static BodyHandler<String> ofLockToken() {
return (responseInfo) -> BodySubscribers.replacing(getLockToken(responseInfo.headers()));
}
-
+ // TODO: exception handling
static String getLockToken(HttpHeaders headers) {
List<String> ltHeader = headers.allValues(DavConstants.HEADER_LOCK_TOKEN);
- if (ltHeader == null || ltHeader.length == 0) {
+ if (ltHeader.isEmpty()) {
return null;
- } else if (ltHeader.length != 1) {
- LOG.debug("Multiple 'Lock-Token' header fields in response for " + getURI() + ": " + Arrays.asList(ltHeader));
+ } else if (ltHeader.size() != 1) {
+ LOG.debug("Multiple 'Lock-Token' header fields in response {}", ltHeader);
return null;
} else {
- String v = ltHeader[0].getValue().trim();
+ String v = ltHeader.get(0).trim();
if (!v.startsWith("<") || !v.endsWith(">")) {
- LOG.debug("Invalid 'Lock-Token' header field in response for " + getURI() + ": " + Arrays.asList(ltHeader));
+ LOG.debug("Invalid 'Lock-Token' header field in response: {}", v);
return null;
} else {
return v.substring(1, v.length() - 1);
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/LockMethod.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/LockMethod.java
index c5033ef..31d9cc4 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/LockMethod.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/LockMethod.java
@@ -8,6 +8,7 @@
import java.net.http.HttpResponse.BodyHandler;
import java.net.http.HttpResponse.ResponseInfo;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import org.apache.http.Header;
@@ -34,56 +35,32 @@
private static final Logger LOG = LoggerFactory.getLogger(LockMethod.class);
private final LockInfo info;
- private final boolean isRefresh;
- LockMethod(LockInfo info) {
+ public LockMethod(LockInfo info) {
this.info = info;
- this.isRefresh = false;
}
- // TODO: separate into two classes
+ // TODO: separate refresh info other class, builder?
+ /*
LockMethod(long timeout, Collection<LockInfo> lockTokens) {
TimeoutHeader th = new TimeoutHeader(timeout);
super.setHeader(th.getHeaderName(), th.getHeaderValue());
IfHeader ifh = new IfHeader(lockTokens);
super.setHeader(ifh.getHeaderName(), ifh.getHeaderValue());
isRefresh = true;
- }
+ }*/
@Override
public Builder newRequestBuilder(URI uri) throws IOException {
Builder builder = super.newRequestBuilder(uri);
- if (isRefresh) {
- builder.method(DavMethods.METHOD_LOCK, HttpRequest.BodyPublishers.noBody());
- TimeoutHeader th = new TimeoutHeader(timeout);
- builder.setHeader(th.getHeaderName(), th.getHeaderValue());
- IfHeader ifh = new IfHeader(lockTokens);
- builder.setHeader(ifh.getHeaderName(), ifh.getHeaderValue());
- } else {
- builder.method(DavMethods.METHOD_LOCK, DavBodyPublishers.ofXmlSerializable(info));
- }
+ builder.method(DavMethods.METHOD_LOCK, DavBodyPublishers.ofXmlSerializable(info));
return builder;
}
@Override
public BodyHandler<String> newBodyResponseHandler() {
- return newMultiStatusAwareBodyHandler(this::getLockToken);
- }
-
- private String getLockToken(HttpHeaders headers) {
- List<String> ltHeader = headers.allValues(DavConstants.HEADER_LOCK_TOKEN);
- if (ltHeader.size() != 1) {
- LOG.debug("Multiple 'Lock-Token' header fields in response for " + response. + ": " + Arrays.asList(ltHeader));
- return null;
- } else {
- String v = ltHeader.get(0).trim();
- if (!v.startsWith("<") || !v.endsWith(">")) {
- LOG.debug("Invalid 'Lock-Token' header field in response for " + getURI() + ": " + Arrays.asList(ltHeader));
- return null;
- } else {
- return v.substring(1, v.length() - 1);
- }
- }
+ // TODO: support multi-status response with lock token in case of failure
+ return DavBodyHandlers.ofLockToken();
}
@Override
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java
index 97a31f2..171776d 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java
@@ -40,7 +40,7 @@
*/
public class HttpLock extends BaseDavRequest {
-
+ private static final Logger LOG = LoggerFactory.getLogger(HttpLock.class);
private final boolean isRefresh;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/package-info.java
index 5fa0937..ca5f176 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/package-info.java
@@ -16,7 +16,7 @@
*/
/**
- * Provides classes for use with the Java HttpClient, supporting WebDAV
+ * Provides classes for use with the Java {@link HttpClient}, supporting WebDAV
* request methods.
* <p>
* The classes in this package are used to create and execute WebDAV requests like this
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
index c31af12..d5257e0 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.4.0")
+@org.osgi.annotation.versioning.Version("1.5.0")
package org.apache.jackrabbit.webdav;
diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/package-info.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/package-info.java
index 70c12ea..8c3aa78 100644
--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/package-info.java
+++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/package-info.java
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.2.0")
+@org.osgi.annotation.versioning.Version("1.3.0")
package org.apache.jackrabbit.webdav.xml;