From: Mathieu Baudier Date: Fri, 16 Sep 2022 09:40:51 +0000 (+0200) Subject: Properly set namespace context X-Git-Tag: v2.3.10~42 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=51cc05f670214c32f3beecc33bb701865ff6c735 Properly set namespace context --- diff --git a/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java b/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java index 0bd3b398e..f7c4ce7de 100644 --- a/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java +++ b/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java @@ -24,7 +24,6 @@ import com.sun.net.httpserver.HttpHandler; * ACR-specific code more readable and maintainable. */ public abstract class DavHttpHandler implements HttpHandler { - private NamespaceContext namespaceContext; @Override public void handle(HttpExchange exchange) throws IOException { @@ -49,6 +48,7 @@ public abstract class DavHttpHandler implements HttpHandler { MultiStatusWriter multiStatusWriter = new MultiStatusWriter(); CompletableFuture 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()); @@ -68,6 +68,8 @@ public abstract class DavHttpHandler implements HttpHandler { } + protected abstract NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path); + protected abstract CompletableFuture handlePROPFIND(HttpExchange exchange, String path, DavPropfind davPropfind, Consumer consumer) throws IOException; @@ -92,8 +94,4 @@ public abstract class DavHttpHandler implements HttpHandler { exchange.getResponseHeaders().add(HttpHeader.ALLOW.getHeaderName(), methods.toString()); } - public void setNamespaceContext(NamespaceContext namespaceContext) { - this.namespaceContext = namespaceContext; - } - } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java index 5a42a3e38..2c1562fb4 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java @@ -10,12 +10,14 @@ import java.util.concurrent.CompletableFuture; 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; @@ -33,6 +35,12 @@ import com.sun.net.httpserver.HttpExchange; 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(),