|
16 | 16 | */ |
17 | 17 | package org.apache.jackrabbit.oak.namepath.impl; |
18 | 18 |
|
19 | | -import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument; |
20 | 19 | import static java.util.Collections.emptyList; |
21 | 20 | import static java.util.Collections.emptyMap; |
22 | 21 | import static java.util.Objects.requireNonNull; |
23 | 22 | import static org.apache.jackrabbit.oak.api.Type.STRINGS; |
| 23 | +import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument; |
24 | 24 | import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; |
| 25 | +import static org.apache.jackrabbit.oak.plugins.name.Namespaces.encodeUri; |
| 26 | +import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getString; |
| 27 | +import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getStrings; |
| 28 | +import static org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory.createReadOnlyRoot; |
| 29 | +import static org.apache.jackrabbit.oak.plugins.tree.factories.TreeFactory.createReadOnlyTree; |
25 | 30 | import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.NAMESPACES_PATH; |
26 | 31 | import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_NSDATA; |
27 | 32 | import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_PREFIXES; |
28 | 33 | import static org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants.REP_URIS; |
29 | | -import static org.apache.jackrabbit.oak.plugins.name.Namespaces.encodeUri; |
30 | | -import static org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory.createReadOnlyRoot; |
31 | | -import static org.apache.jackrabbit.oak.plugins.tree.factories.TreeFactory.createReadOnlyTree; |
32 | | -import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getString; |
33 | | -import static org.apache.jackrabbit.oak.plugins.tree.TreeUtil.getStrings; |
34 | 34 |
|
35 | 35 | import java.util.Map; |
36 | 36 | import java.util.Map.Entry; |
|
40 | 40 | import org.apache.jackrabbit.oak.api.Root; |
41 | 41 | import org.apache.jackrabbit.oak.api.Tree; |
42 | 42 | import org.apache.jackrabbit.oak.namepath.NameMapper; |
| 43 | +import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants; |
43 | 44 | import org.apache.jackrabbit.oak.spi.state.NodeBuilder; |
44 | 45 | import org.apache.jackrabbit.oak.spi.state.NodeState; |
45 | 46 | import org.jetbrains.annotations.NotNull; |
@@ -67,10 +68,16 @@ protected static boolean isHiddenName(String name) { |
67 | 68 | protected static boolean isExpandedName(String name) { |
68 | 69 | if (name.startsWith("{")) { |
69 | 70 | int brace = name.indexOf('}', 1); |
70 | | - return brace != -1 && name.substring(1, brace).indexOf(':') != -1; |
71 | | - } else { |
72 | | - return false; |
| 71 | + if (brace != -1) { |
| 72 | + String namespace = name.substring(1, brace); |
| 73 | + // the empty namespace and "internal" are valid as well, otherwise it always contains a colon (as it is a URI) |
| 74 | + // compare with RFC 3986, Section 3 (https://datatracker.ietf.org/doc/html/rfc3986#section-3) |
| 75 | + if (namespace.isEmpty() || namespace.equals(NamespaceConstants.NAMESPACE_REP)|| namespace.indexOf(':') != -1) { |
| 76 | + return true; |
| 77 | + } |
| 78 | + } |
73 | 79 | } |
| 80 | + return false; |
74 | 81 | } |
75 | 82 |
|
76 | 83 | private final Root root; |
|
0 commit comments