Как найти аннотированные классы в комплекте OSGi - PullRequest
9 голосов
/ 08 декабря 2011

Мои приложения имеют несколько пакетов, которые содержат аннотированные классы JAXB и пакет услуг, который отвечает за создание JAXBContext.

Пакет услуг регистрирует BundleListener и регистрирует события жизненного цикла, но проблема в том, что я не знаю, как извлечь аннотированные классы из объекта org.osgi.framework.Bundle.Добавление записи с классами в MANIFEST.MF и Bundle.loadClass(..) решит мою проблему, но поиск классов по аннотации кажется мне более ясным решением.

У вас есть идеи, как я могу найти аннотированные классы?

Я думаю, мне нужно отсканировать файл jar для ресурсов .class с помощью

Enumeration<?> classes = bundle.findEntries("/", "*.class", true)

и загрузить их с помощью Bundle.loadClass(...).Считаете ли вы, что при таком подходе возникают проблемы с производительностью?

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

Поиск пакета с помощью Bundle.findEntries не выполняет поиск Bundle-Classpath.Вам нужно использовать новый BundleWiring.listResources API.

0 голосов
/ 12 декабря 2011

Я бы взглянул на проект отражений . функция сбора предварительно отсканированных метаданных также может быть полезна.

0 голосов
/ 08 декабря 2011

Взгляните на http://sourceforge.net/projects/extcos/;, в то время как он сосредоточен на компонентном сканировании, я думаю, что он сможет охватить ваш вариант использования. Обратите внимание, что аннотации являются необязательными в JAXB, то есть класс может использоваться JAXB без аннотирования.

...