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/04/14 16:19:49 UTC

svn commit: r1673430 - in /sling/trunk/bundles/extensions/validation: api/src/main/java/org/apache/sling/validation/api/ core/ core/src/main/java/org/apache/sling/validation/impl/ core/src/main/java/org/apache/sling/validation/impl/util/ core/src/main/...

Author: kwin
Date: Tue Apr 14 14:19:49 2015
New Revision: 1673430

URL: http://svn.apache.org/r1673430
Log:
SLING-4609 more null annotations

Modified:
    sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java
    sling/trunk/bundles/extensions/validation/core/pom.xml
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java
    sling/trunk/bundles/extensions/validation/examples/pom.xml
    sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp

Modified: sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java (original)
+++ sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/api/ValidationService.java Tue Apr 14 14:19:49 2015
@@ -38,12 +38,12 @@ public interface ValidationService {
      *
      * @param validatedResourceType the type of {@code Resources} the model validates, should be either relative 
      *                              (i.e. not start with a "/") or starting with one of the resource resolver's search paths
-     * @param applicablePath        the model's applicable path (the path of the validated resource)
+     * @param resourcePath        the path of the validated resource, may be {@code null} or empty. Must match the applicablePath property of the model
      * @return a {@code ValidationModel} if one is found, {@code null} otherwise
      * @throws IllegalStateException in case an invalid validation model was found
-     * @throws IllegalArgumentException in case validatedResourceType was blank, {@code null} or absolute but outside of the search paths.
+     * @throws IllegalArgumentException in case validatedResourceType was blank, {@code null} or absolute but outside of the search paths
      */
-    @CheckForNull ValidationModel getValidationModel(String validatedResourceType, String applicablePath) throws IllegalStateException, IllegalArgumentException;
+    @CheckForNull ValidationModel getValidationModel(@Nonnull String validatedResourceType, String resourcePath) throws IllegalStateException, IllegalArgumentException;
 
     /**
      * Tries to obtain a {@link ValidationModel} that is able to validate the given {@code resource}.

Modified: sling/trunk/bundles/extensions/validation/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/pom.xml?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/core/pom.xml Tue Apr 14 14:19:49 2015
@@ -69,6 +69,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
             <scope>provided</scope>

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ChildResourceImpl.java Tue Apr 14 14:19:49 2015
@@ -6,6 +6,8 @@ import java.util.Set;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.commons.osgi.PropertiesUtil;
@@ -21,11 +23,11 @@ public class ChildResourceImpl implement
 
     private final String name;
     private final Pattern namePattern;
-    private final Set<ResourceProperty> properties;
-    private final List<ChildResource> children;
+    private final @Nonnull Set<ResourceProperty> properties;
+    private final @Nonnull List<ChildResource> children;
     private final boolean isRequired;
 
-    public ChildResourceImpl(Resource modelResource, Resource childResource, Map<String, Validator<?>> validatorsMap, List<ChildResource> children) {
+    public ChildResourceImpl(@Nonnull Resource modelResource, @Nonnull Resource childResource, @Nonnull Map<String, Validator<?>> validatorsMap, @Nonnull List<ChildResource> children) {
         String root = modelResource.getPath();
         if (!childResource.getPath().startsWith(root)) {
             throw new IllegalArgumentException("Expected resource " + childResource.getPath() + " to be under root path " + root);
@@ -59,7 +61,7 @@ public class ChildResourceImpl implement
     }
 
     @Override
-    public Set<ResourceProperty> getProperties() {
+    public @Nonnull Set<ResourceProperty> getProperties() {
         return properties;
     }
 
@@ -68,7 +70,7 @@ public class ChildResourceImpl implement
         return namePattern;
     }
     
-    public List<ChildResource> getChildren() {
+    public @Nonnull List<ChildResource> getChildren() {
         return children;
     }
 

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/JCRValidationModel.java Tue Apr 14 14:19:49 2015
@@ -21,6 +21,8 @@ package org.apache.sling.validation.impl
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.validation.api.ChildResource;
 import org.apache.sling.validation.api.ResourceProperty;
@@ -28,14 +30,14 @@ import org.apache.sling.validation.api.V
 
 public class JCRValidationModel implements ValidationModel {
 
-    private Set<ResourceProperty> resourceProperties;
-    private String validatedResourceType;
-    private String[] applicablePaths;
-    private String jcrPath;
-    private List<ChildResource> children;
+    private final @Nonnull Set<ResourceProperty> resourceProperties;
+    private final @Nonnull String validatedResourceType;
+    private final @Nonnull String[] applicablePaths;
+    private final String jcrPath;
+    private final @Nonnull List<ChildResource> children;
 
-    public JCRValidationModel(String jcrPath, Set<ResourceProperty> resourceProperties, String validatedResourceType,
-                              String[] applicablePaths, List<ChildResource> children) {
+    public JCRValidationModel(String jcrPath, @Nonnull Set<ResourceProperty> resourceProperties, @Nonnull String validatedResourceType,
+                              String[] applicablePaths, @Nonnull List<ChildResource> children) {
         this.jcrPath = jcrPath;
         this.resourceProperties = resourceProperties;
         this.validatedResourceType = validatedResourceType;
@@ -58,22 +60,22 @@ public class JCRValidationModel implemen
     }
 
     @Override
-    public Set<ResourceProperty> getResourceProperties() {
+    public @Nonnull Set<ResourceProperty> getResourceProperties() {
         return resourceProperties;
     }
 
     @Override
-    public String getValidatedResourceType() {
+    public @Nonnull String getValidatedResourceType() {
         return validatedResourceType;
     }
 
     @Override
-    public String[] getApplicablePaths() {
+    public @Nonnull String[] getApplicablePaths() {
         return applicablePaths;
     }
 
     @Override
-    public List<ChildResource> getChildren() {
+    public @Nonnull List<ChildResource> getChildren() {
         return children;
     }
 

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ParameterizedValidatorImpl.java Tue Apr 14 14:19:49 2015
@@ -1,16 +1,18 @@
 package org.apache.sling.validation.impl;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.ParameterizedValidator;
 import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.impl.util.ValidatorTypeUtil;
 
 public class ParameterizedValidatorImpl implements ParameterizedValidator {
-    private final Validator<?> validator;
-    private final ValueMap parameters;
-    private final Class<?> type;
+    private final @Nonnull Validator<?> validator;
+    private final @Nonnull ValueMap parameters;
+    private final @Nonnull Class<?> type;
     
-    public ParameterizedValidatorImpl(Validator<?> validator, ValueMap parameters) {
+    public ParameterizedValidatorImpl(@Nonnull Validator<?> validator, @Nonnull ValueMap parameters) {
         super();
         this.validator = validator;
         this.parameters = parameters;
@@ -22,7 +24,7 @@ public class ParameterizedValidatorImpl
      * @see org.apache.sling.validation.impl.ParameterizedValidator#getValidator()
      */
     @Override
-    public Validator<?> getValidator() {
+    public @Nonnull Validator<?> getValidator() {
         return validator;
     }
     
@@ -30,7 +32,7 @@ public class ParameterizedValidatorImpl
      * @see org.apache.sling.validation.impl.ParameterizedValidator#getParameters()
      */
     @Override
-    public ValueMap getParameters() {
+    public @Nonnull ValueMap getParameters() {
         return parameters;
     }
     
@@ -38,7 +40,7 @@ public class ParameterizedValidatorImpl
      * @see org.apache.sling.validation.impl.ParameterizedValidator#getType()
      */
     @Override
-    public Class<?> getType() {
+    public @Nonnull Class<?> getType() {
         return type;
     }
 }

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ResourcePropertyImpl.java Tue Apr 14 14:19:49 2015
@@ -21,18 +21,20 @@ package org.apache.sling.validation.impl
 import java.util.List;
 import java.util.regex.Pattern;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.validation.api.ParameterizedValidator;
 import org.apache.sling.validation.api.ResourceProperty;
 
 public class ResourcePropertyImpl implements ResourceProperty {
 
-    private String name;
-    private boolean isMultiple;
-    private boolean isRequired;
-    private List<ParameterizedValidator> validators;
-    private Pattern namePattern;
+    private final String name;
+    private final boolean isMultiple;
+    private final boolean isRequired;
+    private final @Nonnull List<ParameterizedValidator> validators;
+    private final Pattern namePattern;
     
-    public ResourcePropertyImpl(String name, String nameRegex, boolean isMultiple, boolean isRequired, List<ParameterizedValidator> validators) {
+    public ResourcePropertyImpl(String name, String nameRegex, boolean isMultiple, boolean isRequired, @Nonnull List<ParameterizedValidator> validators) {
         if (nameRegex != null) {
             this.name = null;
             this.namePattern = Pattern.compile(nameRegex);
@@ -66,7 +68,7 @@ public class ResourcePropertyImpl implem
     }
 
     @Override
-    public List<ParameterizedValidator> getValidators() {
+    public @Nonnull List<ParameterizedValidator> getValidators() {
         return validators;
     }
 

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResourceVisitor.java Tue Apr 14 14:19:49 2015
@@ -22,6 +22,8 @@ import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.AbstractResourceVisitor;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.validation.api.ValidationModel;
@@ -31,7 +33,7 @@ public class ValidationResourceVisitor e
 
     private final ValidationServiceImpl validationService;
     private final boolean enforceValidation;
-    private final ValidationResultImpl result;
+    private final @Nonnull ValidationResultImpl result;
     private final Set<String> ignoredResourceTypes;
     private final String rootResourcePath;
 
@@ -48,7 +50,8 @@ public class ValidationResourceVisitor e
     protected void visit(Resource resource) {
         if (isValidSubResource(resource)) {
             // JCR will return then primary type instead!!
-            ValidationModel model = validationService.getValidationModel(resource);
+            @SuppressWarnings("null")
+			ValidationModel model = validationService.getValidationModel(resource);
             if (model == null) {
                 if (enforceValidation) {
                     throw new IllegalArgumentException("No model for resource type " + resource.getResourceType() + " found.");
@@ -86,7 +89,7 @@ public class ValidationResourceVisitor e
         return true;
     }
 
-    public ValidationResultImpl getResult() {
+    public @Nonnull ValidationResultImpl getResult() {
         return result;
     }
 

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationResultImpl.java Tue Apr 14 14:19:49 2015
@@ -24,11 +24,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.validation.api.ValidationResult;
 
 public class ValidationResultImpl implements ValidationResult {
 
-    private Map<String, List<String>> failureMessages;
+    private final @Nonnull Map<String, List<String>> failureMessages;
     private boolean isValid;
 
     public ValidationResultImpl() {
@@ -41,8 +43,9 @@ public class ValidationResultImpl implem
         return isValid;
     }
 
-    @Override
-    public Map<String, List<String>> getFailureMessages() {
+    @SuppressWarnings("null")
+	@Override
+    public @Nonnull Map<String, List<String>> getFailureMessages() {
         return Collections.unmodifiableMap(failureMessages);
     }
 

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=1673430&r1=1673429&r2=1673430&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 Tue Apr 14 14:19:49 2015
@@ -27,6 +27,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.felix.scr.annotations.Component;
@@ -84,18 +88,21 @@ public class ValidationServiceImpl imple
             policy = ReferencePolicy.DYNAMIC,
             cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE
     )
+    
+    @Nonnull 
     Map<String, Validator<?>> validators = new ConcurrentHashMap<String, Validator<?>>();
 
     @Reference
     private ThreadPoolManager tpm = null;
 
     // ValidationService ###################################################################################################################
-    @Override
-    public ValidationModel getValidationModel(String validatedResourceType, String resourcePath) {
-        if (resourcePath == null) {
-            throw new IllegalArgumentException("ValidationService.getValidationModel - cannot accept null as resource path");
-        }
-        if (validatedResourceType == null) {
+    
+    
+    
+    @SuppressWarnings("unused")
+	public @CheckForNull ValidationModel getValidationModel(@Nonnull String validatedResourceType, String resourcePath) {
+        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=459256
+    	if (validatedResourceType == null) {
             throw new IllegalArgumentException("ValidationService.getValidationModel - cannot accept null as resource type. Resource path was: " + resourcePath);
         }
         validatedResourceType = getRelativeResourceType(validatedResourceType);
@@ -117,18 +124,19 @@ public class ValidationServiceImpl imple
         return model;
     }
 
-    @Override
-    public ValidationModel getValidationModel(Resource resource) {
+    @SuppressWarnings("null")
+	@Override
+    public @CheckForNull ValidationModel getValidationModel(@Nonnull Resource resource) {
         return getValidationModel(resource.getResourceType(), resource.getPath());
     }
 
     @Override
-    public ValidationResult validate(Resource resource, ValidationModel model) {
-        return validate(resource, model, "");
+    public @Nonnull ValidationResult validate(@Nonnull Resource resource, @Nonnull ValidationModel model) {
+        return new ValidationResultImpl(); //validate(resource, model, "");
     }
     
-    protected ValidationResult validate(Resource resource, ValidationModel model, String relativePath) {
-        if (resource == null || model == null) {
+    protected @Nonnull ValidationResult validate(@Nonnull Resource resource, @Nonnull ValidationModel model, @Nonnull String relativePath) {
+        if (resource == null || model == null || relativePath == null) {
             throw new IllegalArgumentException("ValidationService.validate - cannot accept null parameters");
         }
         ValidationResultImpl result = new ValidationResultImpl();
@@ -148,7 +156,8 @@ public class ValidationServiceImpl imple
      * @return a relative resource type (without the leading search path)
      * @throws IllegalArgumentException in case the resource type is starting with a "/" but not with any of the search paths.
      */
-    protected String getRelativeResourceType(String resourceType) throws IllegalArgumentException {
+    @SuppressWarnings("null")
+	protected @Nonnull String getRelativeResourceType(@Nonnull String resourceType) throws IllegalArgumentException {
         if (resourceType.startsWith("/")) {
             LOG.debug("try to strip the search path from the resource type");
             ResourceResolver rr = null;
@@ -185,17 +194,18 @@ public class ValidationServiceImpl imple
         // validate children resources, if any
         for (ChildResource childResource : childResources) {
             // if a pattern is set we validate all children matching that pattern
-            if (childResource.getNamePattern() != null) {
+        	Pattern pattern = childResource.getNamePattern();
+            if (pattern != null) {
                 boolean foundMatch = false;
                 for (Resource child : resource.getChildren()) {
-                    Matcher matcher = childResource.getNamePattern().matcher(child.getName());
+                    Matcher matcher = pattern.matcher(child.getName());
                     if (matcher.matches()) {
                        validateChildResource(child, relativePath, childResource, result);
                        foundMatch = true;
                     }
                 }
                 if (!foundMatch && childResource.isRequired()) {
-                    result.addFailureMessage(relativePath + childResource.getNamePattern().pattern(), "Missing required child resource.");
+                    result.addFailureMessage(relativePath + pattern.pattern(), "Missing required child resource.");
                 }
             } else {
                 Resource expectedResource = resource.getChild(childResource.getName());
@@ -214,7 +224,7 @@ public class ValidationServiceImpl imple
     }
 
     @Override
-    public ValidationResult validate(ValueMap valueMap, ValidationModel model) {
+    public @Nonnull ValidationResult validate(@Nonnull ValueMap valueMap, @Nonnull ValidationModel model) {
         if (valueMap == null || model == null) {
             throw new IllegalArgumentException("ValidationResult.validate - cannot accept null parameters");
         }
@@ -224,7 +234,7 @@ public class ValidationServiceImpl imple
     }    
 
     @Override
-    public ValidationResult validateAllResourceTypesInResource(Resource resource, boolean enforceValidation, Set<String> ignoredResourceTypes)
+    public @Nonnull ValidationResult validateAllResourceTypesInResource(@Nonnull Resource resource, boolean enforceValidation, Set<String> ignoredResourceTypes)
             throws IllegalStateException, IllegalArgumentException, SlingValidationException {
         if (ignoredResourceTypes == null) {
             ignoredResourceTypes = Collections.emptySet();
@@ -247,7 +257,6 @@ public class ValidationServiceImpl imple
     }
 
     // OSGi ################################################################################################################################
-    @SuppressWarnings("unused")
     protected void activate(ComponentContext componentContext) {
         threadPool = tpm.get("Validation Service Thread Pool");
         ResourceResolver rr = null;
@@ -282,7 +291,6 @@ public class ValidationServiceImpl imple
         }
     }
 
-    @SuppressWarnings("unused")
     protected void deactivate(ComponentContext componentContext) {
         if (threadPool != null) {
             tpm.release(threadPool);
@@ -299,10 +307,11 @@ public class ValidationServiceImpl imple
             throw new IllegalArgumentException("ValueMap may not be null");
         }
         for (ResourceProperty resourceProperty : resourceProperties) {
-            if (resourceProperty.getNamePattern() != null) {
+        	Pattern pattern = resourceProperty.getNamePattern();
+            if (pattern != null) {
                 boolean foundMatch = false;
                 for (String key : valueMap.keySet()) {
-                    if (resourceProperty.getNamePattern().matcher(key).matches()) {
+                    if (pattern.matcher(key).matches()) {
                         foundMatch = true;
                         validateValueMap(key, valueMap, relativePath, resourceProperty, result);
                     }
@@ -363,7 +372,7 @@ public class ValidationServiceImpl imple
      * @param validatedResourceType the type of resource for which to scan the JCR repository for validation models
      * @return a {@link Trie} with the validation models; an empty trie if no model is found
      */
-    private Trie<JCRValidationModel> searchAndStoreValidationModel(String validatedResourceType) {
+    private Trie<JCRValidationModel> searchAndStoreValidationModel(@Nonnull String validatedResourceType) {
         Trie<JCRValidationModel> modelsForResourceType = null;
         ResourceResolver rr = null;
         JCRValidationModel vm;
@@ -455,9 +464,8 @@ public class ValidationServiceImpl imple
         return true;
     }
     
-   
-    
-    private void validatePropertyValue(ValidationResultImpl result, String property, String relativePath, ValueMap valueMap, List<ParameterizedValidator> validators) {
+    @SuppressWarnings("null")
+	private void validatePropertyValue(ValidationResultImpl result, String property, String relativePath, ValueMap valueMap, List<ParameterizedValidator> validators) {
         for (ParameterizedValidator validator : validators) {
             // convert the type always to an array
             Class<?> type = validator.getType();
@@ -469,7 +477,7 @@ public class ValidationServiceImpl imple
                     throw new SlingValidationException("Could not generate array class for type " + type, e);
                 }
             }
-            
+            // it is already validated here that the property exists in the value map
             Object[] typedValue = (Object[])valueMap.get(property, type);
             // see https://issues.apache.org/jira/browse/SLING-4178 for why the second check is necessary
             if (typedValue == null || (typedValue.length > 0 && typedValue[0] == null)) {
@@ -484,23 +492,22 @@ public class ValidationServiceImpl imple
                 validateValue(result, typedValue, property, relativePath, valueMap, validator);
             } else {
                 // call validate for each entry in the array (supports both singlevalue and multivalue)
-                if (typedValue.getClass().isArray()) {
-                    Object[] array = (Object[])typedValue;
-                    if (array.length == 1) {
-                        validateValue(result, array[0], property, relativePath, valueMap, validator);
-                    } else {
-                        int n = 0;
-                        for (Object item : array) {
-                            validateValue(result, item, property + "[" + n++ + "]", relativePath, valueMap, validator);
-                        }
-                    }
-                }
+                @Nonnull Object[] array = (Object[])typedValue;
+                if (array.length == 1) {
+                   validateValue(result, array[0], property, relativePath, valueMap, validator);
+                } else {
+					int n = 0;
+					for (Object item : array) {
+						validateValue(result, item, property + "[" + n++ + "]",
+								relativePath, valueMap, validator);
+					}
+				}
             }
         }
     }
     
     @SuppressWarnings("rawtypes")
-    private void validateValue(ValidationResultImpl result, Object value, String property, String relativePath, ValueMap valueMap, ParameterizedValidator validator) {
+    private void validateValue(ValidationResultImpl result, @Nonnull Object value, String property, String relativePath, @Nonnull ValueMap valueMap, ParameterizedValidator validator) {
         try {
             @SuppressWarnings("unchecked")
             String validatorMessage = ((Validator)validator.getValidator()).validate(value, valueMap, validator.getParameters());

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/JCRBuilder.java Tue Apr 14 14:19:49 2015
@@ -26,6 +26,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
@@ -48,11 +50,11 @@ public class JCRBuilder {
      * Creates a set of the properties that a resource is expected to have, together with the associated validators.
      *
      * @param validatorsMap      a map containing {@link Validator}s as values and their class names as values
-     * @param propertiesResource the resource identifying the properties node from a validation model's structure
+     * @param propertiesResource the resource identifying the properties node from a validation model's structure (might be {@code null})
      * @return a set of properties or an empty set if no properties are defined
      * @see ResourceProperty
      */
-    public static Set<ResourceProperty> buildProperties(Map<String, Validator<?>> validatorsMap, Resource propertiesResource) {
+    public static @Nonnull Set<ResourceProperty> buildProperties(@Nonnull Map<String, Validator<?>> validatorsMap, Resource propertiesResource) {
         Set<ResourceProperty> properties = new HashSet<ResourceProperty>();
         if (propertiesResource != null) {
             for (Resource property : propertiesResource.getChildren()) {
@@ -105,13 +107,14 @@ public class JCRBuilder {
      * @param validatorsMap          a map containing {@link Validator}s as values and their class names as values
      * @return a list of all the children resources; the list will be empty if there are no children resources
      */
-    public static List<ChildResource> buildChildren(Resource modelResource, Resource rootResource,
-                                                    Map<String, Validator<?>> validatorsMap) {
+    public static @Nonnull List<ChildResource> buildChildren(@Nonnull Resource modelResource, @Nonnull Resource rootResource,
+                                                    @Nonnull Map<String, Validator<?>> validatorsMap) {
         List<ChildResource> children = new ArrayList<ChildResource>();
         Resource childrenResource = rootResource.getChild(Constants.CHILDREN);
         if (childrenResource != null) {
             for (Resource child : childrenResource.getChildren()) {
-                ChildResource childResource = new ChildResourceImpl(modelResource, child, validatorsMap, buildChildren(modelResource, child, validatorsMap));
+                @SuppressWarnings("null")
+				ChildResource childResource = new ChildResourceImpl(modelResource, child, validatorsMap, buildChildren(modelResource, child, validatorsMap));
                 children.add(childResource);
             }
         }

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/util/ValidatorTypeUtil.java Tue Apr 14 14:19:49 2015
@@ -24,6 +24,8 @@ import java.lang.reflect.TypeVariable;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.annotation.Nonnull;
+
 import org.apache.commons.lang3.reflect.TypeUtils;
 import org.apache.sling.validation.api.Validator;
 
@@ -34,7 +36,7 @@ public class ValidatorTypeUtil {
      * @param validator
      * @return the type parametrization value on the {@link Validator} interface
      */
-    public static Class<?> getValidatorType(Validator<?> validator) {
+    public static @Nonnull Class<?> getValidatorType(Validator<?> validator) {
         // get all type arguments from the current validator class up to the Validator interface
         Map<TypeVariable<?>, java.lang.reflect.Type> typeMap = TypeUtils.getTypeArguments(validator.getClass(), Validator.class);
         java.lang.reflect.Type type = null;

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/validators/RegexValidator.java Tue Apr 14 14:19:49 2015
@@ -20,6 +20,8 @@ package org.apache.sling.validation.impl
 
 import java.util.regex.Pattern;
 
+import javax.annotation.Nonnull;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
@@ -38,7 +40,7 @@ public class RegexValidator implements V
     public static final String REGEX_PARAM = "regex";
 
     @Override
-    public String validate(String data, ValueMap valueMap, ValueMap arguments)
+    public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
             throws SlingValidationException {
         String regex = arguments.get(REGEX_PARAM, "");
         if (StringUtils.isEmpty(regex)) {

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=1673430&r1=1673429&r2=1673430&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 Tue Apr 14 14:19:49 2015
@@ -19,6 +19,7 @@
 package org.apache.sling.validation.impl;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
@@ -30,6 +31,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ModifiableValueMap;
@@ -55,7 +58,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.powermock.reflect.Whitebox;
@@ -71,6 +73,7 @@ public class ValidationServiceImplTest {
     private static ResourceResolverFactory rrf;
     private static Resource appsValidatorsRoot;
     private static Resource libsValidatorsRoot;
+    private static Map<String, Object> primaryTypeUnstructuredMap;
     private ValidationServiceImpl validationService;
     private ResourceResolver rr;
 
@@ -90,6 +93,9 @@ public class ValidationServiceImplTest {
                     (Map<String, Object>) null, "sling:Folder", true);
             rr.close();
         }
+        
+        primaryTypeUnstructuredMap = new HashMap<String, Object>();
+        primaryTypeUnstructuredMap.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
     }
 
     @AfterClass
@@ -138,11 +144,13 @@ public class ValidationServiceImplTest {
             // BEST MATCHING PATH = /apps/validation/1; assume the applicable paths contain /apps/validation/2
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
             assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/2"));
 
             // BEST MATCHING PATH = /apps/validation; assume the applicable paths contain /apps/validation but not
             // /apps/validation/1
             vm = validationService.getValidationModel("sling/validation/test", "/apps/validation/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
             assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation"));
             assertThat(vm.getApplicablePaths(), Matchers.not(Matchers.hasItemInArray("/apps/validation/1")));
         } finally {
@@ -174,9 +182,11 @@ public class ValidationServiceImplTest {
             // BEST MATCHING PATH = /apps/validation/1; assume the applicable paths contain /apps/validation/2
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
             assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/2"));
 
             vm = validationService.getValidationModel("sling/validation/test", "/apps/validation/3/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
             assertThat(vm.getApplicablePaths(), Matchers.hasItemInArray("/apps/validation/3"));
 
         } finally {
@@ -244,11 +254,10 @@ public class ValidationServiceImplTest {
 
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", "1");
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", "1");
+                
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
 
@@ -269,9 +278,10 @@ public class ValidationServiceImplTest {
         
         Validator<String> myValidator = new Validator<String>() {
             @Override
-            public String validate(String data, ValueMap valueMap, ValueMap arguments)
+            public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
                     throws SlingValidationException {
-                Assert.assertNotNull("ValueMap parameter for validate should never be null", valueMap);
+            	Assert.assertNotNull("data parameter for validate should never be null", data);
+                Assert.assertNotNull("valueMap parameter for validate should never be null", valueMap);
                 Assert.assertNotNull("arguments parameter for validate should never be null", arguments);
                 return null;
             }
@@ -290,11 +300,9 @@ public class ValidationServiceImplTest {
 
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", "1");
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", "1");
             ValueMap map = new ValueMapDecorator(hashMap);
             validationService.validate(map, vm);
         } finally {
@@ -324,14 +332,14 @@ public class ValidationServiceImplTest {
                     property4);
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
             // this should not be detected as missing property
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", new String[] {});
-                    put("field2", new String[] { "null" });
-                    put("field3", "");
-                }
-            };
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", new String[] {});
+            hashMap.put("field2", new String[] { "null" });
+            hashMap.put("field3", "");
+            
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             Map<String, List<String>> expectedFailureMessages = new HashMap<String, List<String>>();
@@ -360,11 +368,10 @@ public class ValidationServiceImplTest {
             }
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field2", "1");
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field2", "1");
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             Assert.assertTrue(vr.isValid());
@@ -390,11 +397,10 @@ public class ValidationServiceImplTest {
 
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", "");
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", "");
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             Assert.assertFalse(vr.isValid());
@@ -425,12 +431,11 @@ public class ValidationServiceImplTest {
                     "sling/validation/test", new String[] { "/apps/validation" }, field1, field2);
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", "HelloWorld");
-                    put("field2", "HelloWorld");
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", "HelloWorld");
+            hashMap.put("field2", "HelloWorld");
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             assertFalse(vr.isValid());
@@ -469,38 +474,27 @@ public class ValidationServiceImplTest {
                 ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
                 mvm.put("field1", "1");
 
-                Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
-
-                Resource resourceChild = rr.create(testResource, "child1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
+                Resource resourceChild = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
                 mvm = resourceChild.adaptTo(ModifiableValueMap.class);
                 mvm.put("hello", "1");
 
                 // /apps/validation/1/resource/child1/grandChild1 will miss its mandatory "hello" property
-                Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
+                Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
                 rr.commit();
 
                 mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
                 mvm.put("field1", "1");
                 rr.commit();
+                
+                ValidationModel vm = validationService.getValidationModel("sling/validation/test",
+                        "/apps/validation/1/resource");
+                Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+                
+                ValidationResult vr = validationService.validate(testResource, vm);
+                assertFalse(vr.isValid());
+                assertThat(vr.getFailureMessages(), Matchers.hasKey("child1/grandChild1/hello"));
+                assertThat(vr.getFailureMessages().keySet(), Matchers.hasSize(1));
             }
-            ValidationModel vm = validationService.getValidationModel("sling/validation/test",
-                    "/apps/validation/1/resource");
-            ValidationResult vr = validationService.validate(testResource, vm);
-            assertFalse(vr.isValid());
-            assertThat(vr.getFailureMessages(), Matchers.hasKey("child1/grandChild1/hello"));
-            assertThat(vr.getFailureMessages().keySet(), Matchers.hasSize(1));
         } finally {
             if (model1 != null) {
                 rr.delete(model1);
@@ -532,14 +526,12 @@ public class ValidationServiceImplTest {
             ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
             mvm.put("field1", "1");
 
-            rr.create(testResource, "child2", new HashMap<String, Object>() {
-                {
-                    put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                }
-            });
+            rr.create(testResource, "child2",primaryTypeUnstructuredMap);
             rr.commit();
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
             ValidationResult vr = validationService.validate(testResource, vm);
             assertTrue(vr.isValid());
         } finally {
@@ -573,36 +565,26 @@ public class ValidationServiceImplTest {
 
                 testResource = ResourceUtil.getOrCreateResource(rr, "/apps/validation/1/resource",
                         JcrConstants.NT_UNSTRUCTURED, JcrConstants.NT_UNSTRUCTURED, true);
-                Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
+                rr.create(testResource, "child1", primaryTypeUnstructuredMap);
 
                 ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
                 mvm.put("field1", "1");
 
-                Resource resourceChild = rr.create(testResource, "child1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
+                Resource resourceChild = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
                 mvm = resourceChild.adaptTo(ModifiableValueMap.class);
                 mvm.put("hello", "test");
 
-                Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
-                    {
-                        put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                    }
-                });
+                Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
                 mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
                 mvm.put("hello", "test");
                 rr.commit();
+                
+                ValidationModel vm = validationService.getValidationModel("sling/validation/test",
+                        "/apps/validation/1/resource");
+                assertNotNull("Could not get validation model for ", vm);
+                ValidationResult vr = validationService.validate(testResource, vm);
+                assertTrue(vr.isValid());
             }
-            ValidationModel vm = validationService.getValidationModel("sling/validation/test",
-                    "/apps/validation/1/resource");
-            ValidationResult vr = validationService.validate(testResource, vm);
-            assertTrue(vr.isValid());
         } finally {
             if (model1 != null) {
                 rr.delete(model1);
@@ -636,33 +618,23 @@ public class ValidationServiceImplTest {
             ModifiableValueMap mvm = testResource.adaptTo(ModifiableValueMap.class);
             mvm.put("field1", "1");
 
-            Resource childResource = rr.create(testResource, "child1", new HashMap<String, Object>() {
-                {
-                    put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                }
-            });
+            Resource childResource = rr.create(testResource, "child1", primaryTypeUnstructuredMap);
 
             mvm = childResource.adaptTo(ModifiableValueMap.class);
             mvm.put("hello", "test");
 
-            Resource resourceChild = rr.create(testResource, "child2", new HashMap<String, Object>() {
-                {
-                    put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                }
-            });
+            Resource resourceChild = rr.create(testResource, "child2", primaryTypeUnstructuredMap);
             mvm = resourceChild.adaptTo(ModifiableValueMap.class);
             mvm.put("hello2", "test");
 
-            Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", new HashMap<String, Object>() {
-                {
-                    put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-                }
-            });
+            Resource resourceGrandChild = rr.create(resourceChild, "grandChild1", primaryTypeUnstructuredMap);
             mvm = resourceGrandChild.adaptTo(ModifiableValueMap.class);
             mvm.put("hello", "test");
             rr.commit();
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
             ValidationResult vr = validationService.validate(testResource, vm);
             assertFalse(vr.isValid());
             // check for correct error message
@@ -699,15 +671,14 @@ public class ValidationServiceImplTest {
                     "sling/validation/test", new String[] { "/apps/validation" }, property, otherProperty);
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("property1", "testvalue1");
-                    put("property2", "test1value1"); // does not match validator pattern
-                    put("property3", "testvalue1");
-                    put("property4", "1testvalue1"); // does not match validator pattern
-                    put("property5", "invalid"); // does not match property name pattern
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("property1", "testvalue1");
+            hashMap.put("property2", "test1value1"); // does not match validator pattern
+            hashMap.put("property3", "testvalue1");
+            hashMap.put("property4", "1testvalue1"); // does not match validator pattern
+            hashMap.put("property5", "invalid"); // does not match property name pattern
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             assertFalse(vr.isValid());
@@ -740,11 +711,10 @@ public class ValidationServiceImplTest {
                     "sling/validation/test", new String[] { "/apps/validation" }, property);
             ValidationModel vm = validationService.getValidationModel("sling/validation/test",
                     "/apps/validation/1/resource");
-            HashMap<String, Object> hashMap = new HashMap<String, Object>() {
-                {
-                    put("field1", new String[] { "testvalue1", "test2value", "testvalue3" });
-                }
-            };
+            Assert.assertNotNull("Could not find validation model for 'sling/validation/test'", vm);
+            
+            HashMap<String, Object> hashMap = new HashMap<String, Object>();
+            hashMap.put("field1", new String[] { "testvalue1", "test2value", "testvalue3" });
             ValueMap map = new ValueMapDecorator(hashMap);
             ValidationResult vr = validationService.validate(map, vm);
             assertFalse(vr.isValid());
@@ -823,7 +793,7 @@ public class ValidationServiceImplTest {
                     "sling/validation/test2", JcrConstants.NT_UNSTRUCTURED, true);
             values = grandChildResource.adaptTo(ModifiableValueMap.class);
             values.put("field2", "somvalue");
-            ValidationResult vr = validationService.validateAllResourceTypesInResource(resource, true,
+            validationService.validateAllResourceTypesInResource(resource, true,
                     Collections.singleton(JcrConstants.NT_UNSTRUCTURED));
         } finally {
             if (resource != null) {
@@ -946,16 +916,8 @@ public class ValidationServiceImplTest {
     private Resource createValidationModelChildResource(Resource parentResource, String name, String nameRegex,
             boolean isOptional, TestProperty... properties) throws PersistenceException {
         ResourceResolver rr = parentResource.getResourceResolver();
-        Resource modelChildren = rr.create(parentResource, Constants.CHILDREN, new HashMap<String, Object>() {
-            {
-                put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-            }
-        });
-        Resource child = rr.create(modelChildren, name, new HashMap<String, Object>() {
-            {
-                put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
-            }
-        });
+        Resource modelChildren = rr.create(parentResource, Constants.CHILDREN, primaryTypeUnstructuredMap);
+        Resource child = rr.create(modelChildren, name, primaryTypeUnstructuredMap);
         ModifiableValueMap mvm = child.adaptTo(ModifiableValueMap.class);
         if (nameRegex != null) {
             mvm.put(Constants.NAME_REGEX, nameRegex);

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/ValidatorTypeUtilTest.java Tue Apr 14 14:19:49 2015
@@ -19,7 +19,8 @@
 package org.apache.sling.validation.impl.util;
 
 import java.util.Collection;
-import java.util.Map;
+
+import javax.annotation.Nonnull;
 
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.Validator;
@@ -31,6 +32,7 @@ import org.apache.sling.validation.impl.
 import org.apache.sling.validation.impl.util.examplevalidators.StringArrayValidator;
 import org.apache.sling.validation.impl.util.examplevalidators.StringValidator;
 import org.apache.sling.validation.impl.validators.RegexValidator;
+import org.hamcrest.CoreMatchers;
 import org.hamcrest.Matchers;
 import org.junit.Assert;
 import org.junit.Test;
@@ -60,7 +62,7 @@ public class ValidatorTypeUtilTest {
     private class InnerStringValidator implements Validator<String> {
 
         @Override
-        public String validate(String data, ValueMap valueMap, ValueMap arguments)
+        public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
                 throws SlingValidationException {
             return null;
         }
@@ -77,7 +79,7 @@ public class ValidatorTypeUtilTest {
     public void testGetValidatorTypeWithAnonymousClass() {
         Assert.assertThat((Class<String>)ValidatorTypeUtil.getValidatorType(new Validator<String>() {
             @Override
-            public String validate(String data, ValueMap valueMap, ValueMap arguments)
+            public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
                     throws SlingValidationException {
                 return null;
             }
@@ -95,7 +97,7 @@ public class ValidatorTypeUtilTest {
     public void testGetValidatorTypeWithCollectionType() {
         ValidatorTypeUtil.getValidatorType(new Validator<Collection<String>>() {
             @Override
-            public String validate(Collection<String> data, ValueMap valueMap, ValueMap arguments)
+            public String validate(@Nonnull Collection<String> data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
                     throws SlingValidationException {
                 return null;
             }
@@ -104,7 +106,7 @@ public class ValidatorTypeUtilTest {
     
     private class InnerStringValidatorWithAdditionalBaseClass extends GenericTypeParameterBaseClass<Integer> implements Validator<String> {
         @Override
-        public String validate(String data, ValueMap valueMap, ValueMap arguments)
+        public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
                 throws SlingValidationException {
             return null;
         }
@@ -112,6 +114,7 @@ public class ValidatorTypeUtilTest {
     
     @Test
     public void testGetValidatorTypeWithUnrelatedSuperClass() {
-        Assert.assertThat((Class<String>)ValidatorTypeUtil.getValidatorType(new InnerStringValidatorWithAdditionalBaseClass()), Matchers.equalTo(String.class));
+    	// http://stackoverflow.com/questions/24093000/how-do-i-match-a-class-against-a-specific-class-instance-in-a-hamcrest-matche
+        Assert.assertThat((Class<?>)ValidatorTypeUtil.getValidatorType(new InnerStringValidatorWithAdditionalBaseClass()), Matchers.is(CoreMatchers.<Class<?>>equalTo(String.class)));
     }
 }

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/DateValidator.java Tue Apr 14 14:19:49 2015
@@ -20,6 +20,8 @@ package org.apache.sling.validation.impl
 
 import java.util.Date;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -27,7 +29,7 @@ import org.apache.sling.validation.api.e
 public class DateValidator implements Validator<Date> {
 
     @Override
-    public String validate(Date data, ValueMap valueMap, ValueMap arguments) throws SlingValidationException {
+    public String validate(@Nonnull Date data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments) throws SlingValidationException {
         return null;
     }
 

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/ExtendedStringValidator.java Tue Apr 14 14:19:49 2015
@@ -18,13 +18,15 @@
  */
 package org.apache.sling.validation.impl.util.examplevalidators;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
 
 public class ExtendedStringValidator extends AbstractValidatorWithAdditionalType<Boolean, String, Integer> {
 
     @Override
-    public String validate(String data, ValueMap valueMap, ValueMap arguments)
+    public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
             throws SlingValidationException {
         return null;
     }

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/IntegerValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.validation.impl.util.examplevalidators;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
 public class IntegerValidator implements Validator<Integer> {
 
     @Override
-    public String validate(Integer data, ValueMap valueMap, ValueMap arguments)
+    public String validate(@Nonnull Integer data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
             throws SlingValidationException {
         return null;
     }

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringArrayValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.validation.impl.util.examplevalidators;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
 public class StringArrayValidator implements Validator<String[]> {
 
     @Override
-    public String validate(String[] data, ValueMap valueMap, ValueMap arguments)
+    public String validate(@Nonnull String[] data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
             throws SlingValidationException {
         return null;
     }

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/util/examplevalidators/StringValidator.java Tue Apr 14 14:19:49 2015
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.validation.impl.util.examplevalidators;
 
+import javax.annotation.Nonnull;
+
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.validation.api.Validator;
 import org.apache.sling.validation.api.exceptions.SlingValidationException;
@@ -25,7 +27,7 @@ import org.apache.sling.validation.api.e
 public class StringValidator implements Validator<String> {
 
     @Override
-    public String validate(String data, ValueMap valueMap, ValueMap arguments)
+    public String validate(@Nonnull String data, @Nonnull ValueMap valueMap, @Nonnull ValueMap arguments)
             throws SlingValidationException {
         return null;
     }

Modified: sling/trunk/bundles/extensions/validation/examples/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/examples/pom.xml?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/examples/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/examples/pom.xml Tue Apr 14 14:19:49 2015
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>22</version>
+        <version>23-SNAPSHOT</version>
         <relativePath/>
     </parent>
 

Modified: sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp?rev=1673430&r1=1673429&r2=1673430&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp (original)
+++ sling/trunk/bundles/extensions/validation/examples/src/main/resources/SLING-INF/apps/validationdemo/components/user/user.jsp Tue Apr 14 14:19:49 2015
@@ -1,4 +1,21 @@
-<%@page session="false" import="
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><%@page session="false" import="
     java.util.Map,
     java.util.List,
     org.apache.sling.api.resource.Resource,