This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch OAK-10544b in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit f9226844905a381505fddd6edd9c7684db2f12a7 Author: Julian Reschke <[email protected]> AuthorDate: Tue Jan 23 16:51:57 2024 +0100 OAK-10544: oak-jcr: remapping a namespace prefix leaves namespace resolver in broken state --- .../org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java | 7 +++++++ .../src/test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java index 8a217e2cc8..d64d600cbf 100644 --- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java +++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java @@ -72,6 +72,8 @@ public class SessionNamespaces extends LocalNameMapper { "Prefix is not a valid XML NCName: " + prefix); } + String previouslyMappedUri = getOakURIOrNull(prefix); + // remove the possible existing mapping for the given prefix local.remove(prefix); @@ -86,6 +88,11 @@ public class SessionNamespaces extends LocalNameMapper { // add the new mapping local.put(prefix, uri); + + // make sure the previously mapped URI has a prefix + if (previouslyMappedUri != null) { + getNamespacePrefix(previouslyMappedUri); + } } /** diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java index 556a41f7ad..6224f87d43 100644 --- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java +++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java @@ -220,7 +220,6 @@ public class NamePathTest { } @Test - @Ignore("OAK-10544") public void testPrefixRemapping() throws NamespaceException, RepositoryException { Random r = new Random(); int i1 = r.nextInt();
