From 0503cddd26f3795a640d74c0ebbbcf0625f24cae Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 8 Sep 2021 07:14:15 +0200 Subject: [PATCH] Use internal classloader for reading Jackrabbit configurations. --- .../CustomRepositoryConfigurationParser.java | 20 ++++++++++++++----- .../cms/internal/jcr/RepositoryBuilder.java | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java b/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java index 2e703ced8..c2898577e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/jcr/CustomRepositoryConfigurationParser.java @@ -2,6 +2,7 @@ package org.argeo.cms.internal.jcr; import java.util.Properties; +import org.apache.jackrabbit.core.config.BeanConfig; import org.apache.jackrabbit.core.config.ConfigurationException; import org.apache.jackrabbit.core.config.RepositoryConfigurationParser; import org.apache.jackrabbit.core.config.WorkspaceSecurityConfig; @@ -14,7 +15,7 @@ import org.w3c.dom.Element; */ @SuppressWarnings("restriction") class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser { - private ClassLoader accessControlProviderClassLoader = null; + private ClassLoader classLoader = null; public CustomRepositoryConfigurationParser(Properties variables) { super(variables); @@ -30,19 +31,28 @@ class CustomRepositoryConfigurationParser extends RepositoryConfigurationParser props.putAll(variables); CustomRepositoryConfigurationParser subParser = new CustomRepositoryConfigurationParser(props, connectionFactory); - subParser.setAccessControlProviderClassLoader(accessControlProviderClassLoader); + subParser.setClassLoader(classLoader); return subParser; } @Override public WorkspaceSecurityConfig parseWorkspaceSecurityConfig(Element parent) throws ConfigurationException { WorkspaceSecurityConfig workspaceSecurityConfig = super.parseWorkspaceSecurityConfig(parent); - workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(accessControlProviderClassLoader); + workspaceSecurityConfig.getAccessControlProviderConfig().setClassLoader(classLoader); return workspaceSecurityConfig; } - public void setAccessControlProviderClassLoader(ClassLoader accessControlProviderClassLoader) { - this.accessControlProviderClassLoader = accessControlProviderClassLoader; + @Override + protected BeanConfig parseBeanConfig(Element parent, String name) throws ConfigurationException { + BeanConfig beanConfig = super.parseBeanConfig(parent, name); + if (beanConfig.getClassName().startsWith("org.argeo")) { + beanConfig.setClassLoader(classLoader); + } + return beanConfig; + } + + public void setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; } } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java b/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java index 9480a2913..fbb1e4f7a 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/jcr/RepositoryBuilder.java @@ -61,7 +61,7 @@ public class RepositoryBuilder { // custom configuration parser CustomRepositoryConfigurationParser parser = new CustomRepositoryConfigurationParser(jackrabbitVars); - parser.setAccessControlProviderClassLoader(cl); + parser.setClassLoader(cl); RepositoryConfig repositoryConfig = parser.parseRepositoryConfig(config); repositoryConfig.init(); -- 2.30.2