You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2017/02/02 11:47:34 UTC
karaf git commit: [KARAF-4974] Fix for ArrayIndexOutOfBoundsException
in service list
Repository: karaf
Updated Branches:
refs/heads/master 0a92dab2a -> 4dbd30403
[KARAF-4974] Fix for ArrayIndexOutOfBoundsException in service list
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/4dbd3040
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/4dbd3040
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/4dbd3040
Branch: refs/heads/master
Commit: 4dbd30403bb37b59244a856e60c7ff9630b6a5d0
Parents: 0a92dab
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Thu Feb 2 12:47:16 2017 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Thu Feb 2 12:47:16 2017 +0100
----------------------------------------------------------------------
.../karaf/service/command/ListServices.java | 24 +++++++++++++++-----
.../service/command/ObjectClassMatcherTest.java | 3 +--
.../service/command/TestBundleFactory.java | 7 ++++--
3 files changed, 24 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/4dbd3040/service/core/src/main/java/org/apache/karaf/service/command/ListServices.java
----------------------------------------------------------------------
diff --git a/service/core/src/main/java/org/apache/karaf/service/command/ListServices.java b/service/core/src/main/java/org/apache/karaf/service/command/ListServices.java
index aed352e..c4036cd 100644
--- a/service/core/src/main/java/org/apache/karaf/service/command/ListServices.java
+++ b/service/core/src/main/java/org/apache/karaf/service/command/ListServices.java
@@ -101,9 +101,11 @@ public class ListServices implements Action {
if (services != null) {
for (ServiceReference<?> serviceReference : services) {
String[] names = (String[])serviceReference.getProperty(Constants.OBJECTCLASS);
- for (String name : names) {
- int curCount = (serviceNames.containsKey(name)) ? serviceNames.get(name) : 0;
- serviceNames.put(name, curCount + 1);
+ if (names != null) {
+ for (String name : names) {
+ int curCount = (serviceNames.containsKey(name)) ? serviceNames.get(name) : 0;
+ serviceNames.put(name, curCount + 1);
+ }
}
}
}
@@ -152,13 +154,23 @@ public class ListServices implements Action {
public final class ServiceClassComparator implements Comparator<ServiceReference<?>> {
@Override
public int compare(ServiceReference<?> o1, ServiceReference<?> o2) {
- String[] classes1 = (String[])o1.getProperty(Constants.OBJECTCLASS);
- String[] classes2 = (String[])o2.getProperty(Constants.OBJECTCLASS);
- return classes1[0].compareTo(classes2[0]);
+ String class1 = getObjectClass(o1);
+ String class2 = getObjectClass(o2);
+ return class1.compareTo(class2);
}
+
+ private String getObjectClass(ServiceReference<?> o1) {
+ Object value = o1.getProperty(Constants.OBJECTCLASS);
+ if (value == null || !(value instanceof String[])) {
+ return "";
+ }
+ String[] values = (String[]) value;
+ return values.length == 0 ? "" : values[0];
+ }
}
public void setBundleContext(BundleContext bundleContext) {
this.bundleContext = bundleContext;
}
+
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4dbd3040/service/core/src/test/java/org/apache/karaf/service/command/ObjectClassMatcherTest.java
----------------------------------------------------------------------
diff --git a/service/core/src/test/java/org/apache/karaf/service/command/ObjectClassMatcherTest.java b/service/core/src/test/java/org/apache/karaf/service/command/ObjectClassMatcherTest.java
index 296b591..890ee04 100644
--- a/service/core/src/test/java/org/apache/karaf/service/command/ObjectClassMatcherTest.java
+++ b/service/core/src/test/java/org/apache/karaf/service/command/ObjectClassMatcherTest.java
@@ -16,8 +16,7 @@
*/
package org.apache.karaf.service.command;
-import junit.framework.Assert;
-
+import org.junit.Assert;
import org.junit.Test;
public class ObjectClassMatcherTest {
http://git-wip-us.apache.org/repos/asf/karaf/blob/4dbd3040/service/core/src/test/java/org/apache/karaf/service/command/TestBundleFactory.java
----------------------------------------------------------------------
diff --git a/service/core/src/test/java/org/apache/karaf/service/command/TestBundleFactory.java b/service/core/src/test/java/org/apache/karaf/service/command/TestBundleFactory.java
index 3d83670..66e86dc 100644
--- a/service/core/src/test/java/org/apache/karaf/service/command/TestBundleFactory.java
+++ b/service/core/src/test/java/org/apache/karaf/service/command/TestBundleFactory.java
@@ -64,9 +64,11 @@ public class TestBundleFactory {
ServiceReference<?> ref1 = createServiceRef(Constants.OBJECTCLASS, new String[]{"org.example.MyService"},
"key1", "value1");
ServiceReference<?> ref2 = createServiceRef(Constants.OBJECTCLASS, new String[]{"org.example.OtherService"}, "key2", 1);
+ // No ObjectClass which can happen for gogo commands
+ ServiceReference<?> ref3 = createServiceRef(Constants.OBJECTCLASS, new String[]{}, "osgi.command.scope", "task");
addRegisteredServices(bundle1, ref1, ref2);
- addRegisteredServices(bundle2, ref2);
+ addRegisteredServices(bundle2, ref2, ref3);
expect(bundle3.getRegisteredServices()).andReturn(null).anyTimes();
expect(bundle1.getServicesInUse()).andReturn(null).anyTimes();
@@ -75,8 +77,9 @@ public class TestBundleFactory {
expect(ref1.getUsingBundles()).andReturn(new Bundle[]{bundle2, bundle3}).anyTimes();
expect(ref2.getUsingBundles()).andReturn(new Bundle[]{bundle3}).anyTimes();
+ expect(ref3.getUsingBundles()).andReturn(new Bundle[]{bundle3}).anyTimes();
- replay(bundle1, bundle2, bundle3, ref1, ref2);
+ replay(bundle1, bundle2, bundle3, ref1, ref2, ref3);
return new Bundle[] { bundle1, bundle2, bundle3 };
}