OSGi Equinox: как добавить обработчик протокола для LDAP?

У меня проблемы с добавлением обработчика протокола для LDAP в среде OSGi. Я старался:

  • System.setProperty("java.protocol.handler.pkgs", "iaik.x509.net");
  • -Djava.protocol.handler.pkgs=iaik.x509.net в настройках запуска

но все же получить java.net.MalformedURLException: unknown protocol: ldap

Обработчик протокола для LDAP находится в iaik.x509.net и экспортируется его комплектом. Я импортирую этот пакет (который имеет iaik.x509.net) тоже. Мне кажется, что Система не может найти пакет, хотя. Как правильно "зарегистрировать" этот обработчик протокола? Я использую равноденствие 3.6.0 с использованием Java 1.6.

2 ответа

Решение

Попробуй установить iaik.x509.net bundle как расширение пакета Framework. Он должен содержать заголовок MANIFEST:

Фрагмент-хост: system.bundle; расширение:= загрузочный путь к классам

В этом случае обработчик протокола LDAP будет доступен для всех пакетов как часть пути загрузки. Не забудьте установить системное свойство.

Более подробная информация о пакетах расширений: OSGi Core Spec 4.2 - Глава 3.14

Не должно ли имущество быть: -Djava.protocol.handler.pkgs=iaik.x509.net.ldap (это должен быть пакет класса, расширяющего URLConnection, если смотреть на это). Чтобы использовать его таким образом, вам нужно добавить его в Jar для загрузки classpath и экспортировать этот пакет как часть системного пакета с org.osgi.framework.system.packages.extra=iaik.x509.net.ldap

Или же превратите его в первоклассный компонент OSGi. Создайте пакет, который предоставляет оболочку для обработчика с реализацией org.osgi.service.url.URLStreamHandlerService который экспортирует служебную собственность url.handler.protocol=ldap

Не так много работы, чтобы добавить небольшой пакет, экспортирующий URLStreamHandlerService, я определенно так и поступлю.

Другие вопросы по тегам