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 <[email protected]>
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"));
+
+ }
}