This is an automated email from the ASF dual-hosted git repository. sseifert pushed a commit to branch feature/SLING-11189-content-reader-listener-dependency in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-contentloader.git
commit f76b5f6494e188a5e213c7766409453a6aaf0da1 Author: Stefan Seifert <[email protected]> AuthorDate: Wed Mar 9 14:02:13 2022 +0100 SLING-11189 ensure all built-in content readers are registered before processing any bundle in this listener --- .../internal/BundleContentLoaderListener.java | 11 +++++++++++ .../internal/BundleContentLoaderListenerTest.java | 18 ++++++++++++++---- .../internal/BundleContentLoaderTest.java | 20 +++++++++++--------- .../internal/hc/BundleContentLoadedCheckTest.java | 8 +++++--- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListener.java b/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListener.java index 1df747b..5792f15 100644 --- a/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListener.java +++ b/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListener.java @@ -35,6 +35,7 @@ import javax.jcr.lock.LockManager; import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.jcr.api.SlingRepository; +import org.apache.sling.jcr.contentloader.ContentReader; import org.apache.sling.serviceusermapping.ServiceUserMapped; import org.apache.sling.settings.SlingSettingsService; import org.osgi.framework.Bundle; @@ -122,6 +123,16 @@ public class BundleContentLoaderListener implements SynchronousBundleListener, B @Reference protected SlingSettingsService settingsService; + // SLING-11189: ensure all built-in content readers are registered before processing any bundle in this listener + @Reference(target = "(component.name=org.apache.sling.jcr.contentloader.internal.readers.JsonReader)") + private ContentReader mandatoryContentReader1; + @Reference(target = "(component.name=org.apache.sling.jcr.contentloader.internal.readers.OrderedJsonReader)") + private ContentReader mandatoryContentReader2; + @Reference(target = "(component.name=org.apache.sling.jcr.contentloader.internal.readers.XmlReader)") + private ContentReader mandatoryContentReader3; + @Reference(target = "(component.name=org.apache.sling.jcr.contentloader.internal.readers.ZipReader)") + private ContentReader mandatoryContentReader4; + // ---------- BundleListener ----------------------------------------------- /** diff --git a/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListenerTest.java b/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListenerTest.java index 0bdef08..ca0a497 100644 --- a/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListenerTest.java +++ b/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderListenerTest.java @@ -41,6 +41,10 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.lock.LockManager; +import org.apache.sling.jcr.contentloader.internal.readers.JsonReader; +import org.apache.sling.jcr.contentloader.internal.readers.OrderedJsonReader; +import org.apache.sling.jcr.contentloader.internal.readers.XmlReader; +import org.apache.sling.jcr.contentloader.internal.readers.ZipReader; import org.apache.sling.testing.mock.osgi.MockBundle; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; @@ -67,6 +71,12 @@ public class BundleContentLoaderListenerTest { @Before public void setup() throws Exception { + // prepare content readers + context.registerInjectActivateService(JsonReader.class); + context.registerInjectActivateService(OrderedJsonReader.class); + context.registerInjectActivateService(XmlReader.class); + context.registerInjectActivateService(ZipReader.class); + // whiteboard which holds readers context.registerInjectActivateService(new ContentReaderWhiteboard()); @@ -112,10 +122,10 @@ public class BundleContentLoaderListenerTest { bcNode.addNode(bundle.getSymbolicName()).addMixin("mix:lockable"); session.save(); LockManager lockManager = session.getWorkspace().getLockManager(); - lockManager.lock(bcNode.getNode(bundle.getSymbolicName()).getPath(), - false, // isDeep - true, // isSessionScoped - Long.MAX_VALUE, // timeoutHint + lockManager.lock(bcNode.getNode(bundle.getSymbolicName()).getPath(), + false, // isDeep + true, // isSessionScoped + Long.MAX_VALUE, // timeoutHint null); // ownerInfo assertNull(underTest.getBundleContentInfo(session, bundle, false)); diff --git a/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderTest.java b/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderTest.java index 40b5a41..ce5ce7f 100644 --- a/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderTest.java +++ b/src/test/java/org/apache/sling/jcr/contentloader/internal/BundleContentLoaderTest.java @@ -49,6 +49,7 @@ import org.apache.jackrabbit.commons.JcrUtils; import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; import org.apache.sling.api.resource.Resource; import org.apache.sling.jcr.contentloader.internal.readers.JsonReader; +import org.apache.sling.jcr.contentloader.internal.readers.OrderedJsonReader; import org.apache.sling.jcr.contentloader.internal.readers.XmlReader; import org.apache.sling.jcr.contentloader.internal.readers.ZipReader; import org.apache.sling.testing.mock.osgi.MockBundle; @@ -74,9 +75,10 @@ public class BundleContentLoaderTest { @Before public void prepareContentLoader() throws Exception { // prepare content readers - context.registerInjectActivateService(new JsonReader()); - context.registerInjectActivateService(new XmlReader()); - context.registerInjectActivateService(new ZipReader()); + context.registerInjectActivateService(JsonReader.class); + context.registerInjectActivateService(OrderedJsonReader.class); + context.registerInjectActivateService(XmlReader.class); + context.registerInjectActivateService(ZipReader.class); // whiteboard which holds readers context.registerInjectActivateService(new ContentReaderWhiteboard()); @@ -109,14 +111,14 @@ public class BundleContentLoaderTest { Privilege[] customPrivilegeSingleItemArray = new Privilege[]{ customPrivilege }; JcrUtils.getOrCreateByPath(path, NodeType.NT_FOLDER, session); - + AccessControlManager acMgr = session.getAccessControlManager(); AccessControlList acl = (AccessControlList)acMgr.getApplicablePolicies(path).nextAccessControlPolicy(); Principal everyone = EveryonePrincipal.getInstance(); assertTrue(acl.addAccessControlEntry(everyone, customPrivilegeSingleItemArray)); AccessControlEntry[] expectedAces = acl.getAccessControlEntries(); acMgr.setPolicy(path, acl); - + session.save(); return expectedAces; } @@ -131,7 +133,7 @@ public class BundleContentLoaderTest { AccessControlEntry[] aces = acl.getAccessControlEntries(); assertThat(aces, Matchers.arrayContaining(expectedAces)); } - + @Test public void loadContentOverwriteWithoutPath() throws Exception { AccessControlEntry[] expectedAces = createFolderNodeAndACL("/apps/child"); @@ -220,7 +222,7 @@ public class BundleContentLoaderTest { }); - Bundle mockBundle = newBundleWithInitialContent(context, + Bundle mockBundle = newBundleWithInitialContent(context, "SLING-INF/libs/app;path:=/libs/app,SLING-INF/content/app;path:=/content/app"); contentLoader.registerBundle(context.resourceResolver().adaptTo(Session.class), mockBundle, false); @@ -282,7 +284,7 @@ public class BundleContentLoaderTest { }); - Bundle mockBundle = newBundleWithInitialContent(context, + Bundle mockBundle = newBundleWithInitialContent(context, "SLING-INF/libs/app;path:=/libs/app"); contentLoader.registerBundle(context.resourceResolver().adaptTo(Session.class), mockBundle, false); @@ -313,7 +315,7 @@ public class BundleContentLoaderTest { dumpRepo("/", 2); - Bundle mockBundle = newBundleWithInitialContent(context, + Bundle mockBundle = newBundleWithInitialContent(context, "SLING-INF/libs/app;path:=/libs/app;ignoreImportProviders:=xml"); contentLoader.registerBundle(context.resourceResolver().adaptTo(Session.class), mockBundle, false); diff --git a/src/test/java/org/apache/sling/jcr/contentloader/internal/hc/BundleContentLoadedCheckTest.java b/src/test/java/org/apache/sling/jcr/contentloader/internal/hc/BundleContentLoadedCheckTest.java index cddbd68..5726157 100644 --- a/src/test/java/org/apache/sling/jcr/contentloader/internal/hc/BundleContentLoadedCheckTest.java +++ b/src/test/java/org/apache/sling/jcr/contentloader/internal/hc/BundleContentLoadedCheckTest.java @@ -34,6 +34,7 @@ import org.apache.sling.jcr.contentloader.internal.BundleContentLoaderTest; import org.apache.sling.jcr.contentloader.internal.BundleHelper; import org.apache.sling.jcr.contentloader.internal.ContentReaderWhiteboard; import org.apache.sling.jcr.contentloader.internal.readers.JsonReader; +import org.apache.sling.jcr.contentloader.internal.readers.OrderedJsonReader; import org.apache.sling.jcr.contentloader.internal.readers.XmlReader; import org.apache.sling.jcr.contentloader.internal.readers.ZipReader; import org.apache.sling.testing.mock.osgi.MockBundle; @@ -61,9 +62,10 @@ public class BundleContentLoadedCheckTest { bundle = BundleContentLoaderTest.newBundleWithInitialContent(context, "SLING-INF/libs/app;path:=/libs/app"); // prepare content readers - context.registerInjectActivateService(new JsonReader()); - context.registerInjectActivateService(new XmlReader()); - context.registerInjectActivateService(new ZipReader()); + context.registerInjectActivateService(JsonReader.class); + context.registerInjectActivateService(OrderedJsonReader.class); + context.registerInjectActivateService(XmlReader.class); + context.registerInjectActivateService(ZipReader.class); // whiteboard which holds readers context.registerInjectActivateService(new ContentReaderWhiteboard());
