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

kwin 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 bb5ca5a6e0 OAK-9584: Support expanded names in JCR method arguments 
for prefix "rep:"
bb5ca5a6e0 is described below

commit bb5ca5a6e011f07385ff965d3166ad8d7e636bf1
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Mon Apr 28 15:12:54 2025 +0200

    OAK-9584: Support expanded names in JCR method arguments for prefix
    "rep:"
    
    Treat "{internal}" as namespace although it is no proper URI
---
 .../jackrabbit/oak/namepath/impl/GlobalNameMapper.java    |  3 +++
 oak-doc/src/site/markdown/constraints.md                  |  2 +-
 oak-jcr/pom.xml                                           |  1 -
 .../org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java | 15 +++++++++++++++
 4 files changed, 19 insertions(+), 2 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..546d9aab13 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
@@ -194,6 +194,9 @@ public class GlobalNameMapper implements NameMapper {
             String uri = expandedName.substring(1, brace);
             if (uri.isEmpty()) {
                 return expandedName.substring(2); // special case: {}name
+            } else if (uri.equals(NamespaceConstants.NAMESPACE_REP)) {
+                // special case: {internal}name -> no proper URI
+                return NamespaceConstants.PREFIX_REP + ':' + 
expandedName.substring(brace + 1);
             } else if (uri.indexOf(':') != -1) {
                 // It's an expanded name, look up the namespace prefix
                 String oakPrefix = getOakPrefixOrNull(uri);
diff --git a/oak-doc/src/site/markdown/constraints.md 
b/oak-doc/src/site/markdown/constraints.md
index 328d9d4ce9..bed28072b1 100755
--- a/oak-doc/src/site/markdown/constraints.md
+++ b/oak-doc/src/site/markdown/constraints.md
@@ -40,7 +40,7 @@ a (local) name (see [JCR v2.0 Specification, Section 
5.2.2.1](https://s.apache.o
 Finally, the chosen persistence implementation might restrict node names even 
further.
 See [Node Name Length Limit](./differences.md#node-name-length-limit).
 
-The namespace for prefix `rep` (`internal`) is not a valid URI therefore you 
can only use the qualified names but not the expanded names ([JCR v2.0 
Specification, Section 
3.2.5](https://s.apache.org/jcr-2.0-spec/3_Repository_Model.html#3.2.5%20Lexical%20Form%20of%20JCR%20Names))
 when addressing items in that 
namespace([OAK-74](https://issues.apache.org/jira/browse/OAK-74)).
+The namespace for prefix `rep` (=`internal`) is not a valid URI, however still 
used in the namespace registry. Therefore local names starting with 
`{internal}` (which clashes with the [expanded 
name](https://s.apache.org/jcr-2.0-spec/3_Repository_Model.html#3.2.5%20Lexical%20Form%20of%20JCR%20Names)
 for namespace prefix `rep:`) are not allowed in Oak 
([OAK-74](https://issues.apache.org/jira/browse/OAK-74)).
 
 ## Invalid Java Strings
 
diff --git a/oak-jcr/pom.xml b/oak-jcr/pom.xml
index c939c6bce6..d72fd64813 100644
--- a/oak-jcr/pom.xml
+++ b/oak-jcr/pom.xml
@@ -54,7 +54,6 @@
       
org.apache.jackrabbit.test.api.WorkspaceMoveSameNameSibsTest#testMoveNodesOrderingSupportedByParent
 <!-- OAK-118 -->
       org.apache.jackrabbit.test.api.WorkspaceMoveTest#testMoveNodesLocked     
                        <!-- OAK-118 -->
       
org.apache.jackrabbit.test.api.NamespaceRemappingTest#testPrefixRemapping       
                 <!-- OAK-10544 -->
-      org.apache.jackrabbit.oak.jcr.ValidNamesTest#testRepNamespaceUri         
                        <!-- OAK-74 -->
 
       <!-- Locking : not fully implemented -->
       org.apache.jackrabbit.test.api.lock.LockTest#testNodeLocked <!-- 
OAK-3482 -->
diff --git 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
index 223102839a..6510a3daf8 100644
--- 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
+++ 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/JackrabbitNodeTest.java
@@ -336,4 +336,19 @@ public class JackrabbitNodeTest extends AbstractJCRTest {
         assertNotNull(jn.getPropertyOrNull(JcrConstants.JCR_PRIMARYTYPE));
         assertNotNull(jn.getPropertyOrNull("a/aa/p"));
     }
+    
+    public void testGetNodeWithExpandedName() throws Exception {
+        JackrabbitNode jn = (JackrabbitNode) testRootNode; 
+        Node a = jn.addNode(nodeName1, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        // namespace prefix with valid URI
+        a.addNode("test:aa", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        assertNotNull(a.getNode("test:aa"));
+        assertNotNull(a.getNode("{http://www.apache.org/jackrabbit/test}aa";));
+
+        // special namespace prefix having an invalid URI
+        a.addNode("rep:aa", NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+        assertNotNull(a.getNode("rep:aa"));
+        assertNotNull(a.getNode("{internal}aa"));
+        
+    }
 }

Reply via email to