【问题标题】:ClassCastException with OSGI bundle带有 OSGI 包的 ClassCastException
【发布时间】:2016-04-12 03:30:31
【问题描述】:

我正在开发使用 javax.ws.rs-api (2.0.1) 的 OSGi 包。 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]

【问题讨论】:

    标签: osgi classcastexception apache-karaf osgi-bundle


    【解决方案1】:

    你的包必须只导入你需要版本的包。 您必须创建带有Import-Package 标头的META-INF\MANIFEST.MF,其中将包含仅需要版本的软件包列表。

    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 创建requered 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>
    

    别忘了安装 bundle 版本 2.0.1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2016-07-20
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多