Author: kwin
Date: Fri Dec 5 14:12:28 2014
New Revision: 1643291
URL: http://svn.apache.org/r1643291
Log:
SLING-4221 fix for AIOOBE in case of empty multivalue properties
Modified:
sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
Modified:
sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java?rev=1643291&r1=1643290&r2=1643291&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
(original)
+++
sling/trunk/contrib/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
Fri Dec 5 14:12:28 2014
@@ -417,7 +417,7 @@ public class ValidationServiceImpl imple
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[0] == null) {
+ if (typedValue == null || (typedValue.length > 0 && typedValue[0]
== null)) {
// here the missing required property case was already treated
in validateValueMap
result.addFailureMessage(property, "Property was expected to
be of type '" + validator.getType() + "' but cannot be converted to that type."
);
return;
Modified:
sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java?rev=1643291&r1=1643290&r2=1643291&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
(original)
+++
sling/trunk/contrib/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationServiceImplTest.java
Fri Dec 5 14:12:28 2014
@@ -278,6 +278,48 @@ public class ValidationServiceImplTest {
}
@Test()
+ public void testValueMapWithMissingField() throws Exception {
+
validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator",
new RegexValidator());
+
+ TestProperty property = new TestProperty("field1");
+
property.addValidator("org.apache.sling.validation.impl.validators.RegexValidator",
"regex=.*");
+ TestProperty property2 = new TestProperty("field2");
+
property2.addValidator("org.apache.sling.validation.impl.validators.RegexValidator",
"regex=.*");
+ TestProperty property3 = new TestProperty("field3");
+
property3.addValidator("org.apache.sling.validation.impl.validators.RegexValidator",
"regex=.*");
+ TestProperty property4 = new TestProperty("field4");
+
property3.addValidator("org.apache.sling.validation.impl.validators.RegexValidator",
"regex=.*");
+ ResourceResolver rr = rrf.getAdministrativeResourceResolver(null);
+ Resource model1 = null;
+ try {
+ if (rr != null) {
+ model1 = createValidationModelResource(rr,
libsValidatorsRoot.getPath(), "testValidationModel1", "sling/validation/test",
+ new String[]{"/apps/validation"}, property, property2,
property3, property4);
+ }
+ ValidationModel vm =
validationService.getValidationModel("sling/validation/test",
"/apps/validation/1/resource");
+ // 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", "");
+ }};
+ ValueMap map = new ValueMapDecorator(hashMap);
+ ValidationResult vr = validationService.validate(map, vm);
+ Map<String, List<String>> expectedFailureMessages = new
HashMap<String, List<String>>();
+ expectedFailureMessages.put("field4", Arrays.asList("Missing
required property."));
+ Assert.assertThat(vr.getFailureMessages().entrySet(),
Matchers.equalTo(expectedFailureMessages.entrySet()));
+ } finally {
+ if (model1 != null) {
+ rr.delete(model1);
+ }
+ if (rr != null) {
+ rr.commit();
+ rr.close();
+ }
+ }
+ }
+
+ @Test()
public void testValueMapWithMissingOptionalValue() throws Exception {
validationService.validators.put("org.apache.sling.validation.impl.validators.RegexValidator",
new RegexValidator());