Имея уровень владения OSGi, я могу получить строки свойств из:
- BundleContext.getProperty (ключ) (хранится в 'conf / config.properties')
ComponentContext.getProperties (). Get (ключ) (хранится в пакете 'MANIFEST.MF')
Service-Component: \ foo.bar.impl.FixServer; application = "quickfix.Application"; свойства: = "acceptor.resourcename = acceptor.cfg"
Я хочу получить свойства в манифесте пакета, доступные на уровне пакета (т. Е. BundleContext), который выше, чем 'Service-Component' (т.е. ComponentContext).
Может кто-нибудь показать мне, как это можно сделать?
ДОПОЛНЕНИЕ
Из ответов А.В.Алчева и Нила Бартлетта,
java.util.Dictionary headers = Bundle.getHeaders();
- это хороший подход.
Отредактировано 2011-12-10
Тем не менее, синтаксис JAR Manifest (требующий, чтобы первый символ в ключе был прописным, а символ '.' Запрещен), нарушает константы ключа моего приложения, если я не сделаю некоторый рефакторинг.
Если я это сделаю, приложение снова сломается, если я буду использовать файл .properties в будущем.
Чтобы преодолеть (IMO) «ограничение» Синтаксиса манифеста JAR, я придумал эту единственную запись манифеста:
Bundle-Properties: \
foo.bar.prefix=MS,\
foo.bar.hostname=127.0.0.1,\
foo.bar.port=8106,\
foo.bar.homepath=/foo/bar/E3,\
foo.bar.secure=false,\
и код для перебора строки в свойствах:
java.util.Properties properties = new java.util.Properties();
java.util.Dictionary headers = bcontext.getBundle().getHeaders();
String manifest_key = "Bundle-Properties";
String manifest_value = (String) headers.get(manifest_key);
if (manifest_value != null) {
String[] t = manifest_value.split(",");
for (int i = 0; i < t.length; i++) {
String[] u = t[i].split("=");
if (1 < u.length) {
String key = u[0];
String value = u[1];
properties.setProperty(key, value);
}
}
}