Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi Equinox:如何为LDAP添加协议处理程序?_Java_Ldap_Osgi_Equinox_Malformedurlexception - Fatal编程技术网

Java OSGi Equinox:如何为LDAP添加协议处理程序?

Java OSGi Equinox:如何为LDAP添加协议处理程序?,java,ldap,osgi,equinox,malformedurlexception,Java,Ldap,Osgi,Equinox,Malformedurlexception,我在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中,并通过其包导出。 我也在导入这

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

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

或者将其转换为第一类OSGi组件。创建一个捆绑包,该捆绑包为处理程序提供一个包装器,其中包含导出服务属性
url.handler.protocol=ldap的
org.osgi.service.url.URLStreamHandlerService
的实现


添加一个导出URLStreamHandlerService的小捆绑包不需要做很多工作,我肯定会这样做。

尝试将
iaik.x509.net
捆绑包作为框架扩展捆绑包安装。它应该包含清单标题:

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

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


扩展捆绑包的更多详细信息:OSGi核心规范4.2-第3.14章

协议处理程序属性在OSGi中不起作用(只要处理程序在捆绑包中)。它必须是一流的OSGicomponent@J-16SDiZ+1同意,正在更新答案,以指示如何作为非osgi使用。我尝试过这样做,但得到:org.osgi.framework.BundleException:不支持引导类路径扩展。尝试设置系统属性以激活此功能:“org.osgi.supports.bootclasspath.extension=true”。希望得到框架的支持。更多关于OSGi核心规范4.2的详细信息,第3.14.3章,还可以看看“OSGi.framework.extensions”的equinox属性()