This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12439 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git
commit 099778f3bf8251b3d67fa111b86656f03648dbcd Author: Julian Reschke <[email protected]> AuthorDate: Fri Sep 5 13:54:07 2025 +0100 SLING-12439: repoinit allows invalid namespace names (URIs) - log warnings --- .../sling/jcr/repoinit/impl/NamespacesVisitor.java | 5 ++++- .../sling/jcr/repoinit/RegisterNamespacesTest.java | 25 ++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/apache/sling/jcr/repoinit/impl/NamespacesVisitor.java b/src/main/java/org/apache/sling/jcr/repoinit/impl/NamespacesVisitor.java index b4d0ebb..205e858 100644 --- a/src/main/java/org/apache/sling/jcr/repoinit/impl/NamespacesVisitor.java +++ b/src/main/java/org/apache/sling/jcr/repoinit/impl/NamespacesVisitor.java @@ -34,12 +34,15 @@ class NamespacesVisitor extends DoNothingVisitor { public NamespacesVisitor(Session s) { super(s); } - + @Override public void visitRegisterNamespace(RegisterNamespace rn) { try { final NamespaceRegistry reg = session.getWorkspace().getNamespaceRegistry(); log.info("Registering namespace from {}", rn); + if (!rn.getURI().contains(":")) { + log.warn("{} is not a valid namespace name (URI); certain repository operations using this namespace may fail", rn.getURI()); + } reg.registerNamespace(rn.getPrefix(), rn.getURI()); } catch(Exception e) { report(e, "Unable to register namespace from " + rn); diff --git a/src/test/java/org/apache/sling/jcr/repoinit/RegisterNamespacesTest.java b/src/test/java/org/apache/sling/jcr/repoinit/RegisterNamespacesTest.java index 004af9b..7a2d735 100644 --- a/src/test/java/org/apache/sling/jcr/repoinit/RegisterNamespacesTest.java +++ b/src/test/java/org/apache/sling/jcr/repoinit/RegisterNamespacesTest.java @@ -36,19 +36,24 @@ public class RegisterNamespacesTest { @Rule public final SlingContext context = new SlingContext(ResourceResolverType.JCR_OAK); - + private TestUtil U; private NamespaceRegistry ns; - + private static final String TEST_ID = UUID.randomUUID().toString(); + // URN private static final String NS1 = "uri:ns:test1:" + TEST_ID; + // HTTP URI private static final String NS2 = "http://example.com/ns/" + TEST_ID; - + // not a namespace name (URI) at all + private static final String NS3 = TEST_ID; + @Before public void setup() throws RepositoryException, RepoInitParsingException { U = new TestUtil(context); U.parseAndExecute("register namespace (one) " + NS1); U.parseAndExecute("register namespace (two) " + NS2); + U.parseAndExecute("register namespace (three) " + NS3); ns = U.getAdminSession().getWorkspace().getNamespaceRegistry(); } @@ -56,9 +61,21 @@ public class RegisterNamespacesTest { public void NS1registered() throws Exception { assertEquals(NS1, ns.getURI("one")); } - + @Test public void NS2registered() throws Exception { assertEquals(NS2, ns.getURI("two")); } + + @Test + public void NS3registered() throws Exception { + // this will succeed although it is wrong + // (repoinit will log a warning though) + assertEquals(NS3, ns.getURI("three")); + } + + @Test(expected = RepoInitParsingException.class) + public void EmptyNamespaceName() throws RepoInitParsingException, RepositoryException { + U.parseAndExecute("register namespace (four)"); + } }
