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

reschke pushed a commit to branch OAK-11657
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit c8e988ce5c45bd479e4d7a815b3a84cf08c7910c
Author: Julian Reschke <[email protected]>
AuthorDate: Mon Apr 14 14:26:00 2025 +0100

    OAK-11657: JackrabbitSession.getExpandedName/Path need to return stable 
expanded names
---
 .../apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java  |  6 +++---
 .../jackrabbit/oak/jcr/session/JackrabbitSessionTest.java      | 10 ++++++----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java
index 45ca3ffc52..0baa70bbf7 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/impl/GlobalNameMapper.java
@@ -143,11 +143,11 @@ public class GlobalNameMapper implements NameMapper {
         int colon = oakName.indexOf(':');
         if (colon > 0) {
             String oakPrefix = oakName.substring(0, colon);
+            uri = getNamespacesProperty(oakPrefix);
             // local mapping must take precedence...
-            uri = getSessionLocalMappings().get(oakPrefix);
             if (uri == null) {
-                // ...over global mappings
-                uri = getNamespacesProperty(oakPrefix);
+                // ...over local mappings
+                uri = getSessionLocalMappings().get(oakPrefix);
             }
             if (uri == null) {
                 throw new IllegalStateException(
diff --git 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
index f7c86562ad..3c0b1808a4 100644
--- 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
+++ 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
@@ -86,9 +86,11 @@ public class JackrabbitSessionTest extends AbstractJCRTest {
         assertEquals("{}testroot", s.getExpandedName(testRootNode));
         Node n = testRootNode.addNode("test:bar");
         assertEquals("{http://www.apache.org/jackrabbit/test}bar";, 
s.getExpandedName(n));
-        // now remap namespace uri
+        // now remap namespace uri - should not affect expanded name
+        assertEquals("prefix 'test' has unexpected mapping",
+                "http://www.apache.org/jackrabbit/test";, 
s.getNamespaceURI("test"));
         s.setNamespacePrefix("test", "urn:foo");
-        assertEquals("{urn:foo}bar", s.getExpandedName(n));
+        assertEquals("{http://www.apache.org/jackrabbit/test}bar";, 
s.getExpandedName(n));
         // use special namespace uri
         n = testRootNode.addNode("rep:bar");
         assertEquals("{internal}bar", s.getExpandedName(n));
@@ -98,8 +100,8 @@ public class JackrabbitSessionTest extends AbstractJCRTest {
         assertEquals("/{}testroot", s.getExpandedPath(testRootNode));
         Node n = testRootNode.addNode("test:bar").addNode("rep:bar");
         
assertEquals("/{}testroot/{http://www.apache.org/jackrabbit/test}bar/{internal}bar";,
 s.getExpandedPath(n));
-        // now remap namespace uri
+        // now remap namespace uri - should not affect expanded name
         s.setNamespacePrefix("test", "urn:foo");
-        assertEquals("/{}testroot/{urn:foo}bar/{internal}bar", 
s.getExpandedPath(n));
+        
assertEquals("/{}testroot/{http://www.apache.org/jackrabbit/test}bar/{internal}bar";,
 s.getExpandedPath(n));
     }
 }
\ No newline at end of file

Reply via email to