Я не думаю, можно узнать, какие сервисы будет поставляться пакетом, потому что это может произойти изнутри кода Java без метаданных об этом. Конечно, если вы используете Declarative Services, есть файл метаданных. Кроме того, пакет должен импортировать (или предоставлять) интерфейс службы, который может дать вам подсказку (но не более).
Вы можете проверить, какие пакеты Java связывают импорт и экспорт, не активируя его. Если вы хотите установить (не разрешать, не активировать) его, вы можете запросить его. Оболочки Felix или Equinox могут перечислить эти пакеты в конце концов.
Вот relevant source from Felix' shell. Он использует услугу PackageAdmin:
public void execute(String s, PrintStream out, PrintStream err)
{
// Get package admin service.
ServiceReference ref = m_context.getServiceReference(
org.osgi.service.packageadmin.PackageAdmin.class.getName());
PackageAdmin pa = (ref == null) ? null :
(PackageAdmin) m_context.getService(ref);
// ...
Bundle bundle = m_context.getBundle(bundleId);
ExportedPackage[] exports = pa.getExportedPackages(bundle);
// ...
}
Возможно, услуги были выбором слов, в основном я хотел, чтобы возможность пересекать * все * классы, которые экспортируются из комплекта. Из этого я могу проверить, реализует ли какой-либо класс интерфейс и предпринимает соответствующие действия. У меня было ощущение, что официальные API не предлагают этого, и для этого потребуется использование расширений-исполнителей и т. Д. Проблема с этим, конечно, в том, что эти вещи могут быть изменены и т. Д. –