Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DC8C810435 for ; Tue, 17 Mar 2015 09:39:15 +0000 (UTC) Received: (qmail 84786 invoked by uid 500); 17 Mar 2015 09:39:15 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 84745 invoked by uid 500); 17 Mar 2015 09:39:15 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 84736 invoked by uid 99); 17 Mar 2015 09:39:15 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Mar 2015 09:39:15 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id 9B91FAC0163 for ; Tue, 17 Mar 2015 09:39:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1667221 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java Date: Tue, 17 Mar 2015 09:39:15 -0000 To: commits@felix.apache.org From: gnodet@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20150317093915.9B91FAC0163@hades.apache.org> Author: gnodet Date: Tue Mar 17 09:39:15 2015 New Revision: 1667221 URL: http://svn.apache.org/r1667221 Log: [FELIX-4525] Fix problem with DTO containing unsupported values Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java?rev=1667221&r1=1667220&r2=1667221&view=diff ============================================================================== --- felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java (original) +++ felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java Tue Mar 17 09:39:15 2015 @@ -25,8 +25,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.osgi.dto.DTO; import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; @@ -357,7 +357,7 @@ public class DTOFactory private static FrameworkDTO createFrameworkDTO(Felix framework) { FrameworkDTO dto = new FrameworkDTO(); - dto.properties = framework.getConfig(); // This map is immutable, so it's fine to share + dto.properties = convertAttrsToDTO(framework.getConfig()); dto.bundles = new ArrayList(); for (Bundle b : framework.getBundleContext().getBundles()) @@ -424,15 +424,39 @@ public class DTOFactory Map m = new HashMap(); for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() instanceof Version) - // DTOs don't support Version objects - m.put(entry.getKey(), entry.getValue().toString()); - else - m.put(entry.getKey(), entry.getValue()); + Object value = convertAttrToDTO(entry.getValue()); + if (value != null) + { + m.put(entry.getKey(), value); + } } return m; } + private static Object convertAttrToDTO(Object value) + { + if (value instanceof Version) + { + return value.toString(); + } + else if (isPermissibleAttribute(value.getClass()) + || (value.getClass().isArray() + && isPermissibleAttribute(value.getClass().getComponentType()))) + { + return value; + } + else + { + return null; + } + } + + private static boolean isPermissibleAttribute(Class clazz) + { + return clazz == Boolean.class || clazz == String.class + || DTO.class.isAssignableFrom(clazz); + } + private static int getWiringID(Wiring bw) { return bw.hashCode();