Author: justin
Date: Mon Aug 25 11:44:46 2014
New Revision: 1620296

URL: http://svn.apache.org/r1620296
Log:
SLING-3879 - fixing NPE in PathInjector. Thanks Stefan for the patch!

Added:
    
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathAllOptionalModel.java
      - copied, changed from r1620283, 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java
Modified:
    
sling/trunk/bundles/extensions/models/api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java
    
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ResourcePathInjector.java
    
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourcePathInjectionTest.java
    
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java

Modified: 
sling/trunk/bundles/extensions/models/api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java?rev=1620296&r1=1620295&r2=1620296&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/models/api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java
 (original)
+++ 
sling/trunk/bundles/extensions/models/api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ResourcePath.java
 Mon Aug 25 11:44:46 2014
@@ -38,7 +38,7 @@ import org.apache.sling.models.spi.injec
 public @interface ResourcePath {
 
     /**
-     * Specifies the path of the resource. If not provided, the path is 
dervied from the proeprty name.
+     * Specifies the path of the resource. If not provided, the path is 
derived from the property name.
      */
     public String path() default "";
 

Modified: 
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ResourcePathInjector.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ResourcePathInjector.java?rev=1620296&r1=1620295&r2=1620296&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ResourcePathInjector.java
 (original)
+++ 
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/injectors/ResourcePathInjector.java
 Mon Aug 25 11:44:46 2014
@@ -66,7 +66,9 @@ public class ResourcePathInjector extend
             if (resourcePath == null && name != null) {
                 // try to get from value map
                 ValueMap map = getValueMap(adaptable);
-                resourcePath = map.get(name, String.class);
+                if (map != null) {
+                    resourcePath = map.get(name, String.class);
+                }
             }
         }
 

Modified: 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourcePathInjectionTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourcePathInjectionTest.java?rev=1620296&r1=1620295&r2=1620296&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourcePathInjectionTest.java
 (original)
+++ 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourcePathInjectionTest.java
 Mon Aug 25 11:44:46 2014
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Map;
 
+import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
@@ -32,6 +33,7 @@ import org.apache.sling.api.wrappers.Val
 import org.apache.sling.models.impl.injectors.ResourcePathInjector;
 import org.apache.sling.models.impl.injectors.SelfInjector;
 import org.apache.sling.models.impl.injectors.ValueMapInjector;
+import org.apache.sling.models.testmodels.classes.ResourcePathAllOptionalModel;
 import org.apache.sling.models.testmodels.classes.ResourcePathModel;
 import org.junit.Before;
 import org.junit.Test;
@@ -107,4 +109,25 @@ public class ResourcePathInjectionTest {
         assertEquals(byPropertyValueResource2, model.getByDerefProperty2());
     }
 
+    @Test
+    public void testPathInjectionWithNonResourceAdaptable() {
+        SlingHttpServletRequest nonResourceAdaptable = 
mock(SlingHttpServletRequest.class);
+        ResourcePathModel model = factory.getAdapter(nonResourceAdaptable, 
ResourcePathModel.class);
+        // should be null because mandatory fields could not be injected
+        assertNull(model);
+    }
+
+    @Test
+    public void testOptionalPathInjectionWithNonResourceAdaptable() {
+        SlingHttpServletRequest nonResourceAdaptable = 
mock(SlingHttpServletRequest.class);
+        ResourcePathAllOptionalModel model = 
factory.getAdapter(nonResourceAdaptable, ResourcePathAllOptionalModel.class);
+        // should not be null because resource paths fields are optional
+        assertNotNull(model);
+        // but the field itself are null
+        assertNull(model.getFromPath());
+        assertNull(model.getByDerefProperty());
+        assertNull(model.getFromPath2());
+        assertNull(model.getByDerefProperty2());
+   }
+
 }
\ No newline at end of file

Copied: 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathAllOptionalModel.java
 (from r1620283, 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java)
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathAllOptionalModel.java?p2=sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathAllOptionalModel.java&p1=sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java&r1=1620283&r2=1620296&rev=1620296&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java
 (original)
+++ 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathAllOptionalModel.java
 Mon Aug 25 11:44:46 2014
@@ -21,26 +21,30 @@ package org.apache.sling.models.testmode
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.Optional;
 import org.apache.sling.models.annotations.Path;
 import org.apache.sling.models.annotations.injectorspecific.ResourcePath;
 
-@Model(adaptables = Resource.class)
-public class ResourcePathModel {
+@Model(adaptables = {Resource.class, SlingHttpServletRequest.class})
+public class ResourcePathAllOptionalModel {
 
     @Inject
     @Path("/some/path")
+    @Optional
     private Resource fromPath;
 
     @Inject
     @Named("propertyContainingAPath")
+    @Optional
     private Resource derefProperty;
 
-    @ResourcePath(path = "/some/path2")
+    @ResourcePath(path = "/some/path2", optional=true)
     private Resource fromPath2;
 
-    @ResourcePath(name = "anotherPropertyContainingAPath")
+    @ResourcePath(name = "anotherPropertyContainingAPath", optional=true)
     private Resource derefProperty2;
 
     public Resource getFromPath() {

Modified: 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java?rev=1620296&r1=1620295&r2=1620296&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java
 (original)
+++ 
sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourcePathModel.java
 Mon Aug 25 11:44:46 2014
@@ -21,12 +21,13 @@ package org.apache.sling.models.testmode
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Path;
 import org.apache.sling.models.annotations.injectorspecific.ResourcePath;
 
-@Model(adaptables = Resource.class)
+@Model(adaptables = {Resource.class, SlingHttpServletRequest.class})
 public class ResourcePathModel {
 
     @Inject


Reply via email to