[ARIES-884] ClassCastException in JMX when installing some bundles
git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/jmx/jmx-core@1365595 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java b/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java
index 529d518..74fbe63 100644
--- a/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java
+++ b/src/main/java/org/apache/aries/jmx/AbstractCompendiumHandler.java
@@ -17,7 +17,6 @@
package org.apache.aries.jmx;
import java.util.concurrent.ExecutorService;
-
import javax.management.StandardMBean;
import org.apache.aries.jmx.agent.JMXAgentContext;
@@ -77,8 +76,7 @@
//API stipulates versions for compendium services with static ObjectName
//This shouldn't happen but added as a consistency check
if (trackedId != null) {
- String serviceDescription = (String) ((reference.getProperty(Constants.SERVICE_DESCRIPTION) != null) ?
- reference.getProperty(Constants.SERVICE_DESCRIPTION) : reference.getProperty(Constants.OBJECTCLASS));
+ String serviceDescription = getServiceDescription(reference);
logger.log(LogService.LOG_WARNING, "Detected secondary ServiceReference for [" + serviceDescription
+ "] with " + Constants.SERVICE_ID + " [" + serviceId + "] Only 1 instance will be JMX managed");
} else {
@@ -106,8 +104,7 @@
Logger logger = agentContext.getLogger();
Long serviceID = (Long) reference.getProperty(Constants.SERVICE_ID);
if (trackedId != null && !trackedId.equals(serviceID)) {
- String serviceDescription = (String) ((reference.getProperty(Constants.SERVICE_DESCRIPTION) != null) ?
- reference.getProperty(Constants.SERVICE_DESCRIPTION) : reference.getProperty(Constants.OBJECTCLASS));
+ String serviceDescription = getServiceDescription(reference);
logger.log(LogService.LOG_WARNING, "ServiceReference for [" + serviceDescription + "] with "
+ Constants.SERVICE_ID + " [" + serviceID + "] is not currently JMX managed");
} else {
@@ -124,6 +121,26 @@
}
}
+ private String getServiceDescription(ServiceReference reference) {
+ String serviceDescription = (String) reference.getProperty(Constants.SERVICE_DESCRIPTION);
+ if (serviceDescription == null) {
+ Object obj = reference.getProperty(Constants.OBJECTCLASS);
+ if (obj instanceof String) {
+ StringBuilder sb = new StringBuilder();
+ for (String s : (String[]) obj) {
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(s);
+ }
+ serviceDescription = sb.toString();
+ } else {
+ serviceDescription = obj.toString();
+ }
+ }
+ return serviceDescription;
+ }
+
/**
* Gets the <code>StandardMBean</code> managed by this handler when the backing service is available or null
*