X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fruntime%2FCmsAcrHttpHandler.java;h=c80933a559753203cac8e50ebc95b98afd79fd42;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=5a42a3e383ec2d9435af424f7276f394e3f18623;hpb=1d6840195189cbdbf632ca2800b6179d3b6349df;p=lgpl%2Fargeo-commons.git 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..c80933a55 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; @@ -23,9 +25,9 @@ import org.argeo.cms.dav.DavDepth; import org.argeo.cms.dav.DavHttpHandler; import org.argeo.cms.dav.DavPropfind; import org.argeo.cms.dav.DavResponse; +import org.argeo.cms.http.HttpStatus; import org.argeo.cms.internal.http.RemoteAuthHttpExchange; -import org.argeo.util.StreamUtils; -import org.argeo.util.http.HttpResponseStatus; +import org.argeo.cms.util.StreamUtils; import com.sun.net.httpserver.HttpExchange; @@ -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(), @@ -42,7 +50,7 @@ public class CmsAcrHttpHandler extends DavHttpHandler { Content content = session.get(path); Optional size = content.get(DName.getcontentlength, Long.class); try (InputStream in = content.open(InputStream.class)) { - exchange.sendResponseHeaders(HttpResponseStatus.OK.getCode(), size.orElse(0l)); + exchange.sendResponseHeaders(HttpStatus.OK.getCode(), size.orElse(0l)); StreamUtils.copy(in, exchange.getResponseBody()); } catch (IOException e) { throw new RuntimeException("Cannot process " + path, e); @@ -79,20 +87,22 @@ public class CmsAcrHttpHandler extends DavHttpHandler { davResponse.setCollection(true); if (davPropfind.isAllprop()) { for (Map.Entry entry : content.entrySet()) { - davResponse.getPropertyNames().add(entry.getKey()); + davResponse.getPropertyNames(HttpStatus.OK).add(entry.getKey()); processMapEntry(davResponse, entry.getKey(), entry.getValue()); } davResponse.getResourceTypes().addAll(content.getContentClasses()); } else if (davPropfind.isPropname()) { for (QName key : content.keySet()) { - davResponse.getPropertyNames().add(key); + davResponse.getPropertyNames(HttpStatus.OK).add(key); } } else { for (QName key : davPropfind.getProps()) { if (content.containsKey(key)) { - davResponse.getPropertyNames().add(key); + davResponse.getPropertyNames(HttpStatus.OK).add(key); Object value = content.get(key); processMapEntry(davResponse, key, value); + } else { + davResponse.getPropertyNames(HttpStatus.NOT_FOUND).add(key); } if (DName.resourcetype.qName().equals(key)) { davResponse.getResourceTypes().addAll(content.getContentClasses());