This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch DetailedGC/OAK-10199 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 4be79d4edf1128597ac95ac6905fa4cb9c2e4d93 Author: Julian Reschke <[email protected]> AuthorDate: Wed Jan 24 11:31:43 2024 +0100 OAK-10544: oak-jcr: remapping a namespace prefix leaves namespace resolver in broken state (#1283) * OAK-10544: oak-jcr: remapping a namespace prefix leaves namespace resolver in broken state * Update oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java Co-authored-by: Thomas Mueller <[email protected]> --------- Co-authored-by: Thomas Mueller <[email protected]> --- .../org/apache/jackrabbit/oak/jcr/session/SessionNamespaces.java | 9 +++++++++ .../test/java/org/apache/jackrabbit/oak/jcr/NamePathTest.java | 1 - 2 files changed, 9 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..04f287a298 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,13 @@ public class SessionNamespaces extends LocalNameMapper { // add the new mapping local.put(prefix, uri); + + // make sure the previously mapped URI has a prefix + // (getNamespacePrefix has the side effect of generating + // a new prefix if none was found, and adding that to the local mapping) + 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();
