You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ba...@apache.org on 2026/09/21 10:27:15 UTC

(jackrabbit) 01/04: JCR-5139: The import of a system view using expanded names does not work properly

This is an automated email from the ASF dual-hosted git repository.

mbaedke pushed a commit to branch JCR-5139
in repository https://gitbox.apache.org/repos/asf/jackrabbit.git

commit 216d3ea4070d72130103da74e0c52b00e65baa00
Author: Manfred Baedke <ma...@gmail.com>
AuthorDate: Wed Apr 9 16:20:52 2025 +0200

    JCR-5139: The import of a system view using expanded names does not work properly
    
    Added test cases.
---
 jackrabbit-core/pom.xml                            |  1 +
 .../apache/jackrabbit/core/xml/SystemViewTest.java | 69 ++++++++++++++++++++++
 2 files changed, 70 insertions(+)

diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml
index dfe031315..fd6c48f90 100644
--- a/jackrabbit-core/pom.xml
+++ b/jackrabbit-core/pom.xml
@@ -121,6 +121,7 @@ org.apache.jackrabbit.core.config.SecurityConfigTest#testInvalidConfig <!-- JCR-
 org.apache.jackrabbit.core.nodetype.CyclicNodeTypeRegistrationTest <!-- JCR-5208 -->
 org.apache.jackrabbit.core.query.lucene.SearchIndexConsistencyCheckTest#testDoubleCheckStressTest <!-- JCR-5209 -->
 org.apache.jackrabbit.core.version.RemoveAndAddVersionLabelXATest#testVersionLabel <!-- JCR-5210 -->
+org.apache.jackrabbit.core.xml.SystemViewTest#testExpandedNameImportWithoutPrefixDefinition <!-- JCR-5139 -->
               </value>
             </property>
             <property>
diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java
index d36968654..6607e2e7f 100644
--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java
+++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/SystemViewTest.java
@@ -23,6 +23,8 @@ import java.util.Arrays;
 
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.ItemExistsException;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NodeDefinition;
 import javax.jcr.nodetype.NodeType;
@@ -63,6 +65,73 @@ public class SystemViewTest extends AbstractJCRTest {
             "</sv:node>\n";
     }
 
+    private String createExpandedNameWithPrefixDefXml() {
+        return "<sv:node xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" " +
+                "xmlns:knownprefix=\"urn:known\"" +
+                " sv:name=\"foo\">" +
+                "<sv:node sv:name=\"{urn:known}bar\">" +
+                "</sv:node>" +
+                "</sv:node>";
+    }
+
+    private String createExpandedNameWithoutPrefixDefXml() {
+        return "<sv:node xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" " +
+                " sv:name=\"foo\">" +
+                "<sv:node sv:name=\"{urn:unknown}bar\">" +
+                "</sv:node>" +
+                "</sv:node>";
+    }
+
+    public void testExpandedNameImportWithPrefixDefinition() throws Exception {
+        importTestNodeTypes();
+
+        String xml = createExpandedNameWithPrefixDefXml();
+        InputStream input = new ByteArrayInputStream(xml.getBytes("UTF-8"));
+        superuser.importXML(
+                "/", input, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+        NodeIterator nodes = superuser.getRootNode().getNode("foo").getNodes();
+        assertTrue(nodes.hasNext());
+        Node node = nodes.nextNode();
+
+        String prefix = superuser.getNamespacePrefix("urn:known");
+        assertEquals("knownprefix", prefix);
+        String name = node.getName();
+        assertEquals("knownprefix:bar", name);
+    }
+
+    public void testExpandedNameImportWithCollidingPrefixDefinition() throws Exception {
+        importTestNodeTypes();
+
+        superuser.setNamespacePrefix("alreadyknownprefix", "urn:known");
+        String xml = createExpandedNameWithPrefixDefXml();
+        InputStream input = new ByteArrayInputStream(xml.getBytes("UTF-8"));
+        superuser.importXML(
+                "/", input, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+        NodeIterator nodes = superuser.getRootNode().getNode("foo").getNodes();
+        assertTrue(nodes.hasNext());
+        Node node = nodes.nextNode();
+
+        String prefix = superuser.getNamespacePrefix("urn:known");
+        assertEquals("alreadyknownprefix", prefix);
+        String name = node.getName();
+        assertEquals("alreadyknownprefix:bar", name);
+    }
+
+    public void testExpandedNameImportWithoutPrefixDefinition() throws Exception {
+        importTestNodeTypes();
+
+        String xml = createExpandedNameWithoutPrefixDefXml();
+        InputStream input = new ByteArrayInputStream(xml.getBytes("UTF-8"));
+        superuser.importXML(
+                "/", input, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+        NodeIterator nodes = superuser.getRootNode().getNode("foo").getNodes();
+        assertTrue(nodes.hasNext());
+        String prefix = superuser.getNamespacePrefix("urn:unknown");
+        assertNotNull(prefix);
+        String name = nodes.nextNode().getName();
+        assertEquals(prefix + ":bar", name);
+    }
+
     public void testSameNameErrorMessage() throws Exception {
         importTestNodeTypes();