【问题标题】:Karaf OSGi: JAX-RS with CXF: ClassNotFoundException: org.apache.cxf.jaxrs.impl.RuntimeDelegateImplKaraf OSGi:带有 CXF 的 JAX-RS:ClassNotFoundException:org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl
【发布时间】:2013-03-18 20:40:33
【问题描述】:

在 Karaf OSGi(使用 maven 构建)中安装 CXF Web 服务包时,会记录以下错误:

2013-03-18 15:08:29,050 | ERROR | rint Extender: 2 | BlueprintContainerImpl           | container.BlueprintContainerImpl  393 | 7 - org.apache.aries.blueprint.core - 1.1.0 | Unable to start blueprint container for bundle service-server
org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting property: PropertyDescriptor <name: serviceBeans, getter: null, setter: [class org.apache.cxf.jaxrs.JAXRSServerFactoryBean.setServiceBeans(interface java.util.List)]
    at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:941)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[7:org.apache.aries.blueprint.core:1.1.0]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_41]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_41]
    at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:668)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:370)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261)[7:org.apache.aries.blueprint.core:1.1.0]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)[:1.6.0_41]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_41]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_41]
    at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)[7:org.apache.aries.blueprint.core:1.1.0]
    at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[7:org.apache.aries.blueprint.core:1.1.0]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)[:1.6.0_41]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_41]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_41]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)[:1.6.0_41]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)[:1.6.0_41]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)[:1.6.0_41]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)[:1.6.0_41]
    at java.lang.Thread.run(Thread.java:662)[:1.6.0_41]
Caused by: java.lang.ExceptionInInitializerError
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.<clinit>(JAXRSUtils.java:107)
    at org.apache.cxf.jaxrs.model.ClassResourceInfo.getConsumeMime(ClassResourceInfo.java:239)
    at org.apache.cxf.jaxrs.model.OperationResourceInfo.checkMediaTypes(OperationResourceInfo.java:171)
    at org.apache.cxf.jaxrs.model.OperationResourceInfo.<init>(OperationResourceInfo.java:74)
    at org.apache.cxf.jaxrs.utils.ResourceUtils.createOperationInfo(ResourceUtils.java:354)
    at org.apache.cxf.jaxrs.utils.ResourceUtils.evaluateResourceClass(ResourceUtils.java:221)
    at org.apache.cxf.jaxrs.utils.ResourceUtils.createClassResourceInfo(ResourceUtils.java:207)
    at org.apache.cxf.jaxrs.JAXRSServiceFactoryBean.setResourceClassesFromBeans(JAXRSServiceFactoryBean.java:218)
    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.setServiceBeans(JAXRSServerFactoryBean.java:295)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_41]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_41]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_41]
    at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_41]
    at org.apache.aries.blueprint.utils.ReflectionUtils$MethodPropertyDescriptor.internalSet(ReflectionUtils.java:628)
    at org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.set(ReflectionUtils.java:378)
    at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:939)
    ... 26 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:122)
    at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
    at javax.ws.rs.core.MediaType.<clinit>(MediaType.java:44)
    ... 42 more
Caused by: java.lang.ClassNotFoundException: org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)[:1.6.0_41]
    at java.security.AccessController.doPrivileged(Native Method)[:1.6.0_41]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)[:1.6.0_41]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)[:1.6.0_41]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)[:1.6.0_41]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_41]
    at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:37)
    at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:133)
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:105)
    ... 44 more

这与之前的 Caused by: java.lang.ClassNotFoundException: com.sun.rs.ws.ext.RuntimeDelegateImpl 不同,当时我根据多个位置的建议,在我的 ext/system.properties 文件中添加了以下行:

javax.ws.rs.ext.RuntimeDelegate=org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl

我也在我的 pom 中明确地导入了这个包:

<build>
    ...
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.6</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    ...
                    <Import-Package>org.apache.cxf.jaxrs.impl,*</Import-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

唯一导出任何相关内容的捆绑包(据我所知)是:

Apache ServiceMix :: Specs :: JSR-311 API 1.1.1(org.apache.servicemix.specs.jsr311-api-1.1.1)
    Exporting:
        javax.ws.rs,version=1.1.1
        javax.ws.rs.core,version=1.1.1
        javax.ws.rs.ext,version=1.1.1
Apache CXF Bundle Jar(org.apache.cxf.bundle)
    Exporting
        ~25 org.apache.cxf.jaxrs.____ or so packages (including impl)

有人可以帮忙吗?我还没有找到任何解决问题的方法。

【问题讨论】:

    标签: maven osgi cxf jax-rs classnotfoundexception


    【解决方案1】:

    不是一个真正的答案,但我的解决方案是完全放弃 CXF。现在使用简单的 servlet (javax.servlet)

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 2017-11-15
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多