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, я определенно так и поступлю.