【问题标题】:OSGi Equinox: howto add protocol handler for LDAP?OSGi Equinox:如何为 LDAP 添加协议处理程序?
【发布时间】:2012-04-11 19:55:50
【问题描述】:

我在为 OSGi 环境中的 LDAP 添加协议处理程序时遇到问题。我试过了:

  • 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)。对我来说,系统似乎找不到包。如何正确“注册”该协议处理程序? 我正在使用 java 1.6 运行 Equinox 3.6.0。

【问题讨论】:

    标签: java ldap osgi equinox malformedurlexception


    【解决方案1】:

    属性不应该是:-Djava.protocol.handler.pkgs=iaik.x509.net.ldap(从this看,它需要是扩展URLConnection的类的包)。要像这样使用它,您必须将它添加到 Jar 以引导类路径并将该包导出为带有 org.osgi.framework.system.packages.extra=iaik.x509.net.ldap 的系统捆绑包的一部分@

    或者将它变成一流的 OSGi 组件。创建一个包,为处理程序提供一个包装器,实现 org.osgi.service.url.URLStreamHandlerService 导出服务属性 url.handler.protocol=ldap

    添加一个导出URLStreamHandlerService的小包并不多,这绝对是我要走的路。

    【讨论】:

    • 协议处理程序属性在 OSGi 中不起作用(只要处理程序在包中)。它必须是一流的 OSGi 组件
    • @J-16SDiZ +1 同意,更新答案以指示如何用作非 OSGi
    【解决方案2】:

    尝试将iaik.x509.net 包安装为框架扩展包。它应该包含 MANIFEST 标头:

    片段主机:system.bundle;扩展名:=bootclasspath

    在这种情况下,LDAP 协议处理程序将作为 bootclasspath 的一部分可用于所有捆绑包。不要忘记设置系统属性。

    更多关于扩展包的细节:OSGi Core Spec 4.2 - Chapter 3.14

    【讨论】:

    • 我试过了,但我得到:org.osgi.framework.BundleException: Boot classpath extensions are not supported.
    • 尝试设置系统属性以激活此功能:'org.osgi.supports.bootclasspath.extension=true'。希望得到框架的支持。更多细节 OSGi 核心规范 4.2,第 3.14.3 章
    • 看看 'osgi.framework.extensions' Equinox 属性 (help.eclipse.org/indigo/…)
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2015-04-27
    • 1970-01-01
    • 2016-10-06
    • 2016-11-26
    • 2010-10-24
    • 2013-09-03
    • 2021-01-05
    相关资源
    最近更新 更多