diff --git a/changes.xml b/changes.xml
index 912d5cb..4c2bd26 100644
--- a/changes.xml
+++ b/changes.xml
@@ -27,6 +27,9 @@
Switch to AEM 6.5.17 as minimum version.
+
+ Ignore child resources of parsys without assigned resource type (returning nt:unstructured as resource type).
+
diff --git a/src/main/java/io/wcm/wcm/parsys/controller/Parsys.java b/src/main/java/io/wcm/wcm/parsys/controller/Parsys.java
index 107e67f..ac1dd81 100644
--- a/src/main/java/io/wcm/wcm/parsys/controller/Parsys.java
+++ b/src/main/java/io/wcm/wcm/parsys/controller/Parsys.java
@@ -27,6 +27,7 @@
import static io.wcm.wcm.parsys.ParsysNameConstants.PN_PARSYS_PARAGRAPH_VALIDATE;
import static io.wcm.wcm.parsys.ParsysNameConstants.PN_PARSYS_WRAPPER_CSS;
import static io.wcm.wcm.parsys.ParsysNameConstants.PN_PARSYS_WRAPPER_ELEMENT;
+import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
import java.util.ArrayList;
import java.util.Arrays;
@@ -157,6 +158,9 @@ private void activate() {
parsysParentResource = currentResource;
}
for (Resource childResource : parsysParentResource.getChildren()) {
+ if (!acceptResource(childResource)) {
+ continue;
+ }
Item item = createResourceItem(childResource);
if (wcmMode != WCMMode.DISABLED || item.isValid()) {
items.add(item);
@@ -167,6 +171,11 @@ private void activate() {
}
}
+ private static boolean acceptResource(Resource resource) {
+ // skip resources without assigned resource type
+ return !StringUtils.equals(resource.getResourceType(), NT_UNSTRUCTURED);
+ }
+
private static boolean getDecoration(String[] paragraphNoDecorationWcmMode, WCMMode wcmMode) {
if (paragraphNoDecorationWcmMode != null && paragraphNoDecorationWcmMode.length > 0) {
for (String wcmModeItem : paragraphNoDecorationWcmMode) {
@@ -364,6 +373,9 @@ public boolean isWrapperElement() {
private Map getChildModels(@NotNull Class modelClass) {
Map models = new LinkedHashMap<>();
for (Resource child : slingModelFilter.filterChildResources(currentResource.getChildren())) {
+ if (!acceptResource(child)) {
+ continue;
+ }
T model = modelFactory.getModelFromWrappedRequest(request, child, modelClass);
if (model != null) {
models.put(child.getName(), model);
diff --git a/src/test/java/io/wcm/wcm/parsys/controller/ParsysTest.java b/src/test/java/io/wcm/wcm/parsys/controller/ParsysTest.java
index 2f26ed0..80afdd6 100644
--- a/src/test/java/io/wcm/wcm/parsys/controller/ParsysTest.java
+++ b/src/test/java/io/wcm/wcm/parsys/controller/ParsysTest.java
@@ -122,6 +122,9 @@ public Iterable answer(InvocationOnMock invocation) throws Throwable {
par2Resource = context.create().resource(parsysResource.getPath() + "/par2",
"sling:resourceType", COMPONENT_PATH_2,
"valid", false);
+ // this should be always ignored as it does not contain a resource type
+ context.create().resource(parsysResource.getPath() + "/ignore1",
+ "valid", true);
context.currentResource(parsysResource);
}
@@ -315,7 +318,8 @@ void testNewAreaResourceTypeFromSuperComponent() {
void testOtherParentParsysResource() {
context.create().resource("/apps/" + RESOURCE_TYPE_SAMPLE);
parsysResource = context.create().resource(page.getContentResource().getPath() + "/parsysOther");
- par1Resource = context.create().resource(parsysResource.getPath() + "/par1");
+ par1Resource = context.create().resource(parsysResource.getPath() + "/par1",
+ "sling:resourceType", RESOURCE_TYPE_SAMPLE);
context.request().setAttribute(RA_PARSYS_PARENT_RESOURCE, parsysResource);