Author: kwin
Date: Mon Aug 17 14:55:34 2015
New Revision: 1696301
URL: http://svn.apache.org/r1696301
Log:
SLING-4955 fix NPE whenever there was no model associated with the resource
super type
Modified:
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
Modified:
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java?rev=1696301&r1=1696300&r2=1696301&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
(original)
+++
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
Mon Aug 17 14:55:34 2015
@@ -111,10 +111,12 @@ public class ValidationModelRetrieverImp
Collection<ValidationModel> modelsToMerge = new
ArrayList<ValidationModel>();
while ((currentResourceType =
resourceResolver.getParentResourceType(currentResourceType)) != null) {
ValidationModel modelToMerge = getModel(currentResourceType,
resourcePath, resourceResolver);
- if (baseModel == null) {
- baseModel = modelToMerge;
- } else {
- modelsToMerge.add(modelToMerge);
+ if (modelToMerge != null) {
+ if (baseModel == null) {
+ baseModel = modelToMerge;
+ } else {
+ modelsToMerge.add(modelToMerge);
+ }
}
}
if (!modelsToMerge.isEmpty()) {
Modified:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java?rev=1696301&r1=1696300&r2=1696301&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
(original)
+++
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
Mon Aug 17 14:55:34 2015
@@ -198,4 +198,37 @@ public class ValidationModelRetrieverImp
Assert.assertNotNull(model);
Assert.assertThat(model.getResourceProperties(),
Matchers.containsInAnyOrder(new ResourcePropertyNameMatcher("test/type"), new
ResourcePropertyNameMatcher("test/supertype")));
}
+
+ @Test
+ public void
testGetModelWithResourceInheritanceAndNoSuitableBaseModelFound() {
+ // no model found for base type and no resource super type set
+ ValidationModel model = validationModelRetriever.getModel("test/type",
"/content/site1", true, resourceResolver);
+ Assert.assertNull("Found model although no model has been specified",
model);
+
+ // set super super type
+
Mockito.when(resourceResolver.getParentResourceType("test/type")).thenReturn("test/supertype");
+ // no model found at all (neither base nor super type)
+ model = validationModelRetriever.getModel("test/type",
"/content/site1", true, resourceResolver);
+ Assert.assertNull("Found model although no model has been specified
(neither in base nor in super type)", model);
+
+ validationModelRetriever.validationModelsCache.clear();
+
+ // only supertype has model being set
+ applicablePathPerResourceType.put("test/supertype", "/content/site1");
+ model = validationModelRetriever.getModel("test/type",
"/content/site1", true, resourceResolver);
+ Assert.assertNotNull(model);
+ Assert.assertThat(model.getResourceProperties(), Matchers.contains(new
ResourcePropertyNameMatcher("test/supertype")));
+ }
+
+ @Test
+ public void
testGetModelWithResourceInheritanceAndNoModelForSuperTypeFound() {
+ applicablePathPerResourceType.put("test/type", "/content/site1");
+
Mockito.when(resourceResolver.getParentResourceType("test/type")).thenReturn("test/supertype");
+
Mockito.when(resourceResolver.getParentResourceType("test/supertype")).thenReturn("test/supersupertype");
+
+ // only model found for base type
+ ValidationModel model = validationModelRetriever.getModel("test/type",
"/content/site1", true, resourceResolver);
+ Assert.assertNotNull(model);
+ Assert.assertThat(model.getResourceProperties(), Matchers.contains(new
ResourcePropertyNameMatcher("test/type")));
+ }
}