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