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