Properly set namespace context
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Sep 2022 09:40:51 +0000 (11:40 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Sep 2022 09:40:51 +0000 (11:40 +0200)
org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java
org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java

index 0bd3b398e075e479cfa8252d9bb621e7200be231..f7c4ce7de8fbdd93ac9af5f61206578c35eecdac 100644 (file)
@@ -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<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());
@@ -68,6 +68,8 @@ public abstract class DavHttpHandler implements HttpHandler {
 
        }
 
+       protected abstract NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path);
+
        protected abstract CompletableFuture<Void> handlePROPFIND(HttpExchange exchange, String path,
                        DavPropfind davPropfind, Consumer<DavResponse> 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;
-       }
-
 }
index 5a42a3e383ec2d9435af424f7276f394e3f18623..2c1562fb42eed2b3abca92e0236c415ca1b2991f 100644 (file)
@@ -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(),