[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
      *