This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new fcf260283f OAK-10544: oak-jcr: remapping a namespace prefix leaves
namespace resolver in broken state (#1283)
fcf260283f is described below
commit fcf260283f534035f0ceed5cdd7d1ef4d6cf4a4a
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();