2

我在 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。

4

2 回答 2

2

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

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

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

于 2012-03-28T08:58:53.760 回答
1

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

片段主机:system.bundle;扩展:=引导类路径

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

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

于 2012-03-28T10:26:23.900 回答