From 86253b8b5d70971863dc708fb9eb8db1989cb42d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 7 Jul 2025 10:44:23 +0100 Subject: [PATCH 1/2] JCR-5161: NamespaceHelper - get NamespaceRegistry only once --- .../jackrabbit/commons/NamespaceHelper.java | 21 +++++++++++++++++-- .../commons/NamespaceHelperTest.java | 3 +++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java index 16851cd57cc..4fdc101ee57 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java @@ -53,6 +53,11 @@ public class NamespaceHelper { */ private final Session session; + /** + * Current namespace registry. + */ + private NamespaceRegistry namespaceRegistry; + /** * Creates a namespace helper for the given session. * @@ -60,6 +65,19 @@ public class NamespaceHelper { */ public NamespaceHelper(Session session) { this.session = session; + // will be set on demand. + this.namespaceRegistry = null; + } + + /** + Get the namespace registry; needs to be done on-demand because the constructor + does not allow RepositoryException + */ + private NamespaceRegistry getNamespaceRegistry() throws RepositoryException { + if (namespaceRegistry == null) { + namespaceRegistry = session.getWorkspace().getNamespaceRegistry(); + } + return namespaceRegistry; } /** @@ -197,8 +215,7 @@ public String getJcrName(String name) */ public String registerNamespace(String prefix, String uri) throws RepositoryException { - NamespaceRegistry registry = - session.getWorkspace().getNamespaceRegistry(); + NamespaceRegistry registry = getNamespaceRegistry(); try { // Check if the namespace is registered registry.getPrefix(uri); diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java index 17c849d1344..f4baa5c62e7 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java @@ -233,5 +233,8 @@ public void testRegisterNamespace() throws RepositoryException { assertEquals("test1", nsReg.getPrefix("test1:")); assertEquals("test2", nsReg.getPrefix("test2")); assertEquals("ns6", nsReg.getPrefix("test3:")); + + // check invocation count for getNamespaceRegistry (JCR-5161) + Mockito.verify(workspace, Mockito.times(1)).getNamespaceRegistry(); } } From 84a548772a40054af77215158a6a8661d7670327 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 7 Jul 2025 15:38:21 +0100 Subject: [PATCH 2/2] JCR-5161: NamespaceHelper - get NamespaceRegistry only once --- .../java/org/apache/jackrabbit/commons/NamespaceHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java index 4fdc101ee57..978269a5eb0 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java @@ -65,7 +65,7 @@ public class NamespaceHelper { */ public NamespaceHelper(Session session) { this.session = session; - // will be set on demand. + // will be set on lazily this.namespaceRegistry = null; }