带OSGI包的ClassCastException

时间:2016-01-07 16:28:37

标签: osgi classcastexception apache-karaf osgi-bundle

我正在使用OSGi bundle,它使用javax.ws.rs-api(2.0.1)。 Karaf已经将jsr311-api(1.1.1)作为捆绑加载。当我尝试加载我的OSGi包时,我看到以下异常。有没有办法可以忽略以前加载的包?

The activate method has thrown an exception
java.lang.LinkageError: ClassCastException: attempting to castbundle://137.0:1/javax/ws/rs/ext/RuntimeDelegate.class to bundle://177.0:1/javax/ws/rs/ext/RuntimeDelegate.class
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:146)[137:javax.ws.rs.jsr311-api:1.1.1]
    at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)[137:javax.ws.rs.jsr311-api:1.1.1]
    at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95)[137:javax.ws.rs.jsr311-api:1.1.1]
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)[137:javax.ws.rs.jsr311-api:1.1.1]

1 个答案:

答案 0 :(得分:0)

您的捆绑包必须仅导入您需要的软件包版本。 您必须使用META-INF\MANIFEST.MF标头创建Import-Package,其中包含仅需要版本的软件包列表。

Import-Package: javax.ws.rs.ext,version="2.0.1"

列出导致冲突的所有软件包。 我想他们在这里:

javax.ws.rs,version="2.0.1"
javax.ws.rs.client,version="2.0.1"
javax.ws.rs.container,version="2.0.1"
javax.ws.rs.core,version="2.0.1"
javax.ws.rs.ext,version="2.0.1"

您可以指定一系列版本:[2.0.1,3]等。

真实的例子:

Import-Package: org.osgi.service.blueprint; version="[1.0.0, 2.0.0)"

您可以使用maven-bundle-plugin创建重新加注的MANIFEST.MF:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.7</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Description>${project.description}</Bundle-Description>
                    <Import-Package>
                        javax.ws.rs;version=2.0.1,
                        javax.ws.rs.client;version=2.0.1,
                        javax.ws.rs.container;version=2.0.1,
                        javax.ws.rs.core;version=2.0.1,
                        javax.ws.rs.ext;version=2.0.1,
                        *,
                        org.apache.camel.osgi
                    </Import-Package>
                    <Export-Package>
                        your.package
                    </Export-Package>
                </instructions>
            </configuration>
        </plugin>

不要忘记安装捆绑包版本2.0.1

相关问题