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")); + + } }