Fix search in mounted DOM content provider
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / xml / DomContentProvider.java
index d569350975ff1c5fa8597ebe6962f8bbdf95e13a..20f7eb1534cbb79fb21bd17e0fe93585e17bb706 100644 (file)
@@ -22,7 +22,6 @@ import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.cms.acr.CmsContentRepository;
-import org.argeo.cms.acr.ContentUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
@@ -76,9 +75,13 @@ public class DomContentProvider implements ContentProvider, NamespaceContext {
        protected NodeList findContent(String relativePath) {
                if (relativePath.startsWith("/"))
                        throw new IllegalArgumentException("Relative path cannot start with /");
-               String xPathExpression = '/' + relativePath;
-               if (ContentUtils.SLASH_STRING.equals(mountPath)) // repository root
-                       xPathExpression = "/" + CrName.root.qName() + xPathExpression;
+               String xPathExpression;
+               if (Content.ROOT_PATH.equals(mountPath)) {// repository root
+                       xPathExpression = "/" + CrName.root.get() + '/' + relativePath;
+               } else {
+                       String documentNodeName = document.getDocumentElement().getNodeName();
+                       xPathExpression = '/' + documentNodeName + '/' + relativePath;
+               }
                try {
                        NodeList nodes = (NodeList) xPath.get().evaluate(xPathExpression, document, XPathConstants.NODESET);
                        return nodes;
@@ -96,6 +99,7 @@ public class DomContentProvider implements ContentProvider, NamespaceContext {
                return nodes.getLength() != 0;
        }
 
+       @Override
        public void persist(ProvidedSession session) {
                if (mountPath != null) {
                        Content mountPoint = session.getMountPoint(mountPath);