You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2015/08/17 16:55:35 UTC

svn commit: r1696301 - in /sling/trunk/bundles/extensions/validation/core/src: main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java

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