* ACR-specific code more readable and maintainable.
*/
public abstract class DavHttpHandler implements HttpHandler {
- private NamespaceContext namespaceContext;
@Override
public void handle(HttpExchange exchange) throws IOException {
MultiStatusWriter multiStatusWriter = new MultiStatusWriter();
CompletableFuture<Void> published = handlePROPFIND(exchange, subPath, davPropfind, multiStatusWriter);
exchange.sendResponseHeaders(HttpResponseStatus.MULTI_STATUS.getCode(), 0l);
+ NamespaceContext namespaceContext = getNamespaceContext(exchange, subPath);
try (OutputStream out = exchange.getResponseBody()) {
multiStatusWriter.process(namespaceContext, out, published.minimalCompletionStage(),
davPropfind.isPropname());
}
+ protected abstract NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path);
+
protected abstract CompletableFuture<Void> handlePROPFIND(HttpExchange exchange, String path,
DavPropfind davPropfind, Consumer<DavResponse> consumer) throws IOException;
exchange.getResponseHeaders().add(HttpHeader.ALLOW.getHeaderName(), methods.toString());
}
- public void setNamespaceContext(NamespaceContext namespaceContext) {
- this.namespaceContext = namespaceContext;
- }
-
}
import java.util.concurrent.ForkJoinPool;
import java.util.function.Consumer;
+import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import org.argeo.api.acr.Content;
import org.argeo.api.acr.ContentNotFoundException;
import org.argeo.api.acr.ContentSession;
import org.argeo.api.acr.DName;
+import org.argeo.api.acr.RuntimeNamespaceContext;
import org.argeo.api.acr.spi.ProvidedRepository;
import org.argeo.api.cms.CmsConstants;
import org.argeo.cms.auth.RemoteAuthUtils;
public class CmsAcrHttpHandler extends DavHttpHandler {
private ProvidedRepository contentRepository;
+ @Override
+ protected NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path) {
+ // TODO be smarter?
+ return RuntimeNamespaceContext.getNamespaceContext();
+ }
+
@Override
protected void handleGET(HttpExchange exchange, String path) throws IOException {
ContentSession session = RemoteAuthUtils.doAs(() -> contentRepository.get(),