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 2016/04/20 19:53:43 UTC
svn commit: r1740178 - in
/sling/trunk/bundles/extensions/validation/core/src:
main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
Author: kwin
Date: Wed Apr 20 17:53:43 2016
New Revision: 1740178
URL: http://svn.apache.org/viewvc?rev=1740178&view=rev
Log:
SLING-5674 prevent ISE being thrown when acting on NonExistingResources
Modified:
sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java?rev=1740178&r1=1740177&r2=1740178&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java Wed Apr 20 17:53:43 2016
@@ -20,6 +20,7 @@ package org.apache.sling.validation.impl
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Matcher;
@@ -37,10 +38,12 @@ import org.apache.sling.api.resource.Log
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.apache.sling.validation.SlingValidationException;
import org.apache.sling.validation.ValidationResult;
import org.apache.sling.validation.ValidationService;
-import org.apache.sling.validation.SlingValidationException;
import org.apache.sling.validation.model.ChildResource;
import org.apache.sling.validation.model.ParameterizedValidator;
import org.apache.sling.validation.model.ResourceProperty;
@@ -145,11 +148,18 @@ public class ValidationServiceImpl imple
throw new IllegalArgumentException("ValidationService.validate - cannot accept null parameters");
}
CompositeValidationResult result = new CompositeValidationResult();
+ final ValueMap valueMap;
+ if (ResourceUtil.isNonExistingResource(resource)) {
+ // NonExistingResource can not adapt to a ValueMap, therefore just use the empty map here
+ valueMap = new ValueMapDecorator(Collections.emptyMap());
+ } else {
+ valueMap = resource.adaptTo(ValueMap.class);
+ }
// validate direct properties of the resource
- validateValueMap(resource.adaptTo(ValueMap.class), resource, relativePath, model.getResourceProperties(), result );
+ validateValueMap(valueMap, resource, relativePath, model.getResourceProperties(), result );
- // validate children resources, if any
+ // validate child resources, if any
validateChildren(resource, relativePath, model.getChildren(), result);
return result;
}
Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java?rev=1740178&r1=1740177&r2=1740178&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java Wed Apr 20 17:53:43 2016
@@ -32,6 +32,7 @@ import javax.jcr.RepositoryException;
import org.apache.jackrabbit.JcrConstants;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -190,6 +191,30 @@ public class ValidationServiceImplTest {
Assert.assertThat(vr.getFailures(), Matchers.<ValidationFailure> hasItem(new DefaultValidationFailure("field2", 0, RegexValidator.I18N_KEY_PATTERN_DOES_NOT_MATCH, TEST_REGEX)));
}
+ // see https://issues.apache.org/jira/browse/SLING-5674
+ @Test
+ public void testNonExistingResource() throws Exception {
+ propertyBuilder.validator(new RegexValidator(), 0, RegexValidator.REGEX_PARAM, "\\d"); // accept any digits
+ ResourceProperty property = propertyBuilder.build("field1");
+ modelBuilder.resourceProperty(property);
+
+ ChildResource modelChild = new ChildResourceImpl("child", null, true, Collections.singletonList(property), Collections.emptyList());
+ modelBuilder.childResource(modelChild);
+
+ modelChild = new ChildResourceImpl("optionalChild", null, false, Collections.singletonList(property), Collections.emptyList());
+ modelBuilder.childResource(modelChild);
+
+ ValidationModel vm = modelBuilder.build("sometype");
+ ResourceResolver rr = context.resourceResolver();
+ Resource nonExistingResource = new NonExistingResource(rr, "non-existing-resource");
+ ValidationResult vr = validationService.validate(nonExistingResource, vm);
+ Assert.assertFalse("resource should have been considered invalid", vr.isValid());
+ Assert.assertThat(vr.getFailures(), Matchers.<ValidationFailure>containsInAnyOrder(
+ new DefaultValidationFailure("", 0, ValidationServiceImpl.I18N_KEY_MISSING_REQUIRED_PROPERTY_WITH_NAME, "field1"),
+ new DefaultValidationFailure("", 0, ValidationServiceImpl.I18N_KEY_MISSING_REQUIRED_CHILD_RESOURCE_WITH_NAME, "child")
+ ));
+ }
+
@Test
public void testResourceWithMissingGrandChildProperty() throws Exception {
propertyBuilder.validator(new RegexValidator(), 0, RegexValidator.REGEX_PARAM, "\\d"); // accept any digits
@@ -443,6 +468,16 @@ public class ValidationServiceImplTest {
new DefaultValidationFailure("child2", null, ValidationServiceImpl.I18N_KEY_MISSING_REQUIRED_PROPERTY_WITH_NAME, "field2")));
}
+ // see https://issues.apache.org/jira/browse/SLING-5674
+ @Test
+ public void testValidateResourceRecursivelyOnNonExistingResource() throws Exception {
+ ResourceResolver rr = context.resourceResolver();
+ Resource nonExistingResource = new NonExistingResource(rr, "non-existing-resource");
+
+ ValidationResult vr = validationService.validateResourceRecursively(nonExistingResource, true, null, true);
+ Assert.assertTrue("resource should have been considered valid", vr.isValid());
+ }
+
@Test(expected = IllegalArgumentException.class)
public void testValidateResourceRecursivelyWithMissingValidationModel() throws Exception {
// set model retriever which never retrieves anything