【发布时间】:2015-08-18 19:20:29
【问题描述】:
我想在 OSGi 平台中使用OpenStack4j。具体来说,我正在使用Apache Karaf OSGi 运行时(基于Apache Felix OSGi 实现)。
当 OpenStack4j 尝试发现连接器时会出现问题。基于Getting started官方文档指南,我正在尝试使用此行实例化一个v2.0客户端:
OSClient os = OSFactory.builder()
.endpoint("http://host:5000/v2.0")
.credentials("user", "password")
.tenantName("tenant")
.authenticate();
我得到了这个例外:
Caused by: java.lang.ExceptionInInitializerError
at org.openstack4j.openstack.internal.OSAuthenticator.authenticateV2(OSAuthenticator.java:77)
at org.openstack4j.openstack.internal.OSAuthenticator.invoke(OSAuthenticator.java:41)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV2.authenticate(OSClientBuilder.java:84)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV2.authenticate(OSClientBuilder.java:65)
... 19 more
Caused by: java.lang.NullPointerException
at org.openstack4j.core.transport.internal.HttpExecutor.initService(HttpExecutor.java:32)
at org.openstack4j.core.transport.internal.HttpExecutor.<init>(HttpExecutor.java:25)
at org.openstack4j.core.transport.internal.HttpExecutor.<clinit>(HttpExecutor.java:20)
... 27 more
好像和Connector发现有关,但我不确定。
OpenStack4j 不支持 OSGi,I asked for it。我试图解决基于HTTPClient 4 声明Apache Karaf feature 的问题,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<features>
<feature name="openstack4j" version="${openstack4j-version}">
<feature version="${openstack4j-version}">openstack4j-httpclient</feature>
<bundle dependency="true">mvn:com.google.guava/guava/17.0</bundle>
<bundle dependency="true">mvn:com.fasterxml.jackson.core/jackson-databind/2.3.5</bundle>
<bundle dependency="true">mvn:com.fasterxml.jackson.core/jackson-annotations/2.3.5</bundle>
<bundle dependency="true">mvn:com.fasterxml.jackson.core/jackson-core/2.3.5</bundle>
<bundle dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.3.5</bundle>
<bundle dependency="true">mvn:org.yaml/snakeyaml/1.14</bundle>
<bundle dependency="true">wrap:mvn:com.google.code.findbugs/jsr305/2.0.0</bundle>
<bundle>wrap:mvn:org.pacesys/openstack4j-core/${openstack4j-version}</bundle>
</feature>
<feature name="openstack4j-httpclient" version="${openstack4j-version}">
<bundle dependency="true">wrap:mvn:commons-logging/commons-logging/${commons.logging.version}</bundle>
<bundle dependency="true">wrap:mvn:org.apache.httpcomponents/httpclient/4.3.1</bundle>
<bundle dependency="true">wrap:mvn:org.apache.httpcomponents/httpcore/4.3</bundle>
<bundle>wrap:mvn:org.pacesys.openstack4j.connectors/openstack4j-httpclient/${openstack4j-version}</bundle>
</feature>
</features>
但这并没有解决我的问题。
如何在我的 OSGi 环境中使用 OpenStack4j?
编辑: 我发现 NullPointerException 是由代码中的错误引起的(这里是 issue)。已修复。
无论如何,SPI 的问题仍然存在。
【问题讨论】: