Je suis confronté à un problème. J'ai un org.osgi.service.cm.ManagedService
impl client pour une configuration osgi. La configuration est une collection de paires clé-valeur. Les clés de ces propriétés, lorsqu'elles sont passées à la méthode mise à jour (ManagedService.updated
) du ManagedService
en tant qu'objet java.util.Dictionary
, ne sont pas sensibles à la casse, c'est-à-dire que props.get("HellO")
fonctionne même si la clé de la configuration est "Hello".Osgi Config ManagedService Dictionary touches insensible à la casse
Lorsque je convertis ce dictionnaire en Hashmap
en effectuant une itération sur ses entrées, les touches de la carte deviennent sensibles à la casse comme prévu. Est-ce qu'on s'attend à ce que les touches Dictionary
ne respectent pas la casse?
Cela a été testé sur une instance AEM 6.2.
Voici ma classe ManagedService
impl.
public class ConfigService implements ManagedService {
public void updated(final Dictionary props) throws ConfigurationException {
// props.get("HellO") returns value
if (props != null) {
String pid = (String) props.get(Constants.SERVICE_PID);
// convert to map
Map map = map(props);
// map.get("HellO") returns null
// map.get("Hello") returns value
}
}
private static Map map(Dictionary dict) {
Map map = new ConcurrentHashMap();
for (Enumeration keys = dict.keys(); keys.hasMoreElements();) {
Object key = keys.nextElement();
map.put(key, dict.get(key));
}
return map;
}
Le ManagedService
impl est enregistré en tant que service en utilisant le code ci-dessous.
final Dictionary props = new Hashtable();
props.put(Constants.SERVICE_PID, "pid.of.the.osgi.configuration");
ServiceRegistration configSvc = context.registerService(ManagedService.class.getName(),
new ConfigService(), props);
La raison pour laquelle les clés sont insensibles à la casse est que, à l'époque (2000), il semble que les spécifications X.500 allaient être importants. Les certificats X.509, SNMP et LDAP sont, je suppose, le peu de choses qui restent. La sensibilité à la casse est devenue standard et nous avons été pris avec de mauvaises décisions. Un des inconvénients d'une norme qui sort de son chemin pour être rétrocompatible. –