2013-10-25 1 views
1

Есть ли что-то в оболочке OSGi api, которая инкапсулирует пакет, не установленный в контейнере? В принципе, что-то, что возьмет файл и сгенерирует объект с getSymbolicName(), getExportedPackages(), getBundleVersion() и т. Д. Для пакета в файловой системе.Класс/Интерфейс для инкапсуляции пакета OSGi в файловой системе

Bundle Я вижу, но док говорит в первом предложении:

Установленный пакет в Framework.

Таким образом, этот интерфейс имеет методы, которые не имеют смысла для комплекта, который не установлен, просто сидит там в файловой системе, и это то, что мне нужно. Например, он имеет метод start(), который не имеет смысла за пределами контейнера. То же самый с getBundleId()

мне нужно, и я хочу знать, если есть стандартная один, прежде чем я создаю мой собственный

ответ

1

Bundle для Инсталлированной пучки, как вы говорите. Он может использоваться внутри контейнера OSGi для пакета, который обрабатывается контейнером. Однако, если вам нужна информация, которую вы упомянули, очень легко получить небольшую функцию.

  • Создать новую JarFile (Filename)
  • Read манифест
  • Считать значения из манифеста и использовать интерфейс org.osgi.framework.Constants в качестве параметра из manifest.getMainAttributes(). get (ключ).

Вы можете найти пример here в checkBundle() функция (из строки 91)

EDIT

Вы можете использовать JarInputStream если расслоение происходит из somewere еще, но не из файла система.

Вы можете попробовать вынуть felix manifest parser class (или равноденствие или эквивалент Knopflerfish) в автономный проект и поделиться им с сообществом ;-).

+0

Спасибо, Балаз. Я знаю, как извлечь все это, кроме интерфейса Constants, о котором я не знал, и что теперь буду использовать. Спасибо за это. Но ответ на мой вопрос тогда, нет, согласен? Просто, если я создаю свою собственную инкапсуляцию, мне могут не хватать вещи, которые я просто не использую, например getFragmentsHost. Поэтому мне было интересно, есть ли в стандарте полнофункциональная api. Что-то более OO, чем просто строки из манифестных записей, например. класс ExportedPackage с getVersion(), getUses() и т. д. вместо меня разбор строки – Hilikus

+0

В API нет парсера. API больше связан с интерфейсами и константами, чем с классами с реализациями. Насколько я помню, я проверил, как равноденствие и как феликс анализирует MANIFEST.MF, и оба имеют свои собственные простые решения. Это было много лет назад, поэтому я не помню названия классов, но его было непросто найти. Просто нажмите «ctrl + alt + h» в eclipse на любом из постоянных значений, когда felix или equinox находится в пути к классам. Не будет мест, где, например, Используется константа фрагмента-хозяина. –

+0

Помните, что пакеты не обязательно присутствуют в файловой системе вообще. Они загружаются из InputStream, который может прибывать откуда угодно. –

Смежные вопросы