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();