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..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 @@ -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 lazily + 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(); } }