Author: sseifert
Date: Fri Dec 9 21:09:56 2016
New Revision: 1773474
URL: http://svn.apache.org/viewvc?rev=1773474&view=rev
Log:
SLING-6386 osgi-mock: Avoid NPE when providing servicer properties with null
values
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapUtil.java
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImpl.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapUtil.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapUtil.java?rev=1773474&r1=1773473&r2=1773474&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapUtil.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapUtil.java
Fri Dec 9 21:09:56 2016
@@ -46,7 +46,13 @@ public final class MapUtil {
if (map == null) {
return null;
}
- return new Hashtable<T, U>(map);
+ Hashtable<T, U> hashtable = new Hashtable<>();
+ for (Map.Entry<T, U> entry : map.entrySet()) {
+ if (entry.getKey() != null && entry.getValue() != null) {
+ hashtable.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return hashtable;
}
/**
@@ -101,7 +107,11 @@ public final class MapUtil {
}
final Map<String, Object> result = new HashMap<>();
for (int i=0 ; i < args.length; i+=2) {
- result.put(args[i].toString(), args[i+1]);
+ Object key = args[i];
+ Object value = args[i+1];
+ if (key != null && value != null) {
+ result.put(key.toString(), value);
+ }
}
return result;
}
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImpl.java?rev=1773474&r1=1773473&r2=1773474&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImpl.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImpl.java
Fri Dec 9 21:09:56 2016
@@ -20,7 +20,6 @@ package org.apache.sling.testing.mock.os
import java.lang.reflect.Array;
import java.util.Dictionary;
-import java.util.Hashtable;
import java.util.Map;
import org.apache.sling.testing.mock.osgi.MapUtil;
@@ -114,10 +113,7 @@ public class OsgiContextImpl {
* @return Registered service instance
*/
public final <T> T registerService(final Class<T> serviceClass, final T
service, final Map<String, Object> properties) {
- Dictionary<String, Object> serviceProperties = null;
- if (properties != null) {
- serviceProperties = new Hashtable<String, Object>(properties);
- }
+ Dictionary<String, Object> serviceProperties =
MapUtil.toDictionary(properties);
bundleContext().registerService(serviceClass != null ?
serviceClass.getName() : null, service, serviceProperties);
return service;
}
Modified:
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java?rev=1773474&r1=1773473&r2=1773474&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
Fri Dec 9 21:09:56 2016
@@ -126,6 +126,31 @@ public class OsgiContextImplTest {
assertEquals("value3", service.getConfig().get("prop1"));
}
+ @Test
+ public void testRegisterInjectActivateWithPropertiesWithNulls() {
+ context.registerService(ServiceInterface1.class,
mock(ServiceInterface1.class));
+ context.registerService(ServiceInterface2.class,
mock(ServiceInterface2.class));
+ OsgiServiceUtilTest.Service3 service =
context.registerInjectActivateService(new OsgiServiceUtilTest.Service3(),
+ "prop1", "value3",
+ "prop2", null,
+ null, "value4",
+ null, null);
+ assertEquals("value3", service.getConfig().get("prop1"));
+ }
+
+ @Test
+ public void testRegisterInjectActivateWithPropertyMapNulls() {
+ context.registerService(ServiceInterface1.class,
mock(ServiceInterface1.class));
+ context.registerService(ServiceInterface2.class,
mock(ServiceInterface2.class));
+ Map<String,Object> props = new HashMap<>();
+ props.put("prop1", "value3");
+ props.put("prop2", null);
+ props.put(null, "value4");
+ props.put(null, null);
+ OsgiServiceUtilTest.Service3 service =
context.registerInjectActivateService(new OsgiServiceUtilTest.Service3(),
props);
+ assertEquals("value3", service.getConfig().get("prop1"));
+ }
+
@Test(expected=RuntimeException.class)
public void testRegisterInjectActivate_RefrenceMissing() {
context.registerInjectActivateService(new
OsgiServiceUtilTest.Service3());