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")));
+    }
 }


Reply via email to