如何让 Apache Camel Docker 组件在 OSGi 中工作?或者(Jersey 在 OSGi 中不工作)

How to get Apache Camel Docker component to work in OSGi? or (Jersey does not work in OSGi)

A​​pache Camel Docker 组件似乎无法在 OSGI 中运行。

我收到以下错误消息,这似乎是由于 Jersey 无法在 OSGi 环境中工作所致。在 OSGi 环境之外它工作正常。

关键错误信息在这里:

java.lang.RuntimeException:java.lang.ClassNotFoundException:供应商org.glass fish.jersey.internal.RuntimeDelegateImpl 无法实例化:java.lang.Il legalStateException:没有提供生成器,也没有默认生成器 已注册

java.lang.RuntimeException: java.lang.ClassNotFoundException: Provider org.glass
fish.jersey.internal.RuntimeDelegateImpl could not be instantiated: java.lang.Il
legalStateException: No generator was provided and there is no default generator
 registered
        at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:152
)
        at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)

        at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95)
        at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:106)
        at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.ja
va:81)
        at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:297
)
        at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)

        at com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl.init(DockerCmdEx
ecFactoryImpl.java:114)
        at com.github.dockerjava.core.DockerClientImpl.withDockerCmdExecFactory(
DockerClientImpl.java:60)
        at com.github.dockerjava.core.DockerClientBuilder.build(DockerClientBuil
der.java:61)
        at org.apache.camel.component.docker.DockerClientFactory.getDockerClient
(DockerClientFactory.java:118)
        at org.apache.camel.component.docker.producer.DockerProducer.process(Doc
kerProducer.java:99)
        at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncP
rocessorBridge.process(AsyncProcessorConverterHelper.java:61)
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:1
45)
        at org.apache.camel.management.InstrumentationProcessor.process(Instrume
ntationProcessor.java:77)
        at org.apache.camel.processor.interceptor.TraceInterceptor.process(Trace
Interceptor.java:163)
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryE
rrorHandler.java:468)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelIntern
alProcessor.java:197)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelIntern
alProcessor.java:197)
        at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(Time
rConsumer.java:192)
        at org.apache.camel.component.timer.TimerConsumer.run(TimerConsumer.ja
va:76)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.ClassNotFoundException: Provider org.glassfish.jersey.inter
nal.RuntimeDelegateImpl could not be instantiated: java.lang.IllegalStateExcepti
on: No generator was provided and there is no default generator registered
        at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:122)
        at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:225)
        at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:135
)
        ... 24 more
Caused by: java.lang.IllegalStateException: No generator was provided and there
is no default generator registered
        at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(S
erviceLocatorFactoryImpl.java:308)
        at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLo
catorFactoryImpl.java:293)
        at org.glassfish.jersey.internal.inject.Injections._createLocator(Inject
ions.java:138)
        at org.glassfish.jersey.internal.inject.Injections.createLocator(Injecti
ons.java:109)
        at org.glassfish.jersey.internal.RuntimeDelegateImpl.<init>(RuntimeDeleg
ateImpl.java:63)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:118)
        ... 26 more
[Camel (camel-1) thread #0 - timer://fetch] WARN org.apache.camel.component.time
r.TimerConsumer - Error processing exchange. Exchange[ID-orsa-52510-147330437161
1-0-2]. Caused by: [java.lang.RuntimeException - java.lang.ClassNotFoundExceptio
n: Provider org.glassfish.jersey.internal.RuntimeDelegateImpl could not be insta
ntiated: java.lang.IllegalStateException: No generator was provided and there is
 no default generator registered]
java.lang.RuntimeException: java.lang.ClassNotFoundException: Provider org.glass
fish.jersey.internal.RuntimeDelegateImpl could not be instantiated: java.lang.Il
legalStateException: No generator was provided and there is no default generator
 registered
        at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:152
)
        at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)

        at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:95)
        at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:106)
        at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.ja
va:81)
        at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:297
)
        at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)

        at com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl.init(DockerCmdEx
ecFactoryImpl.java:114)
        at com.github.dockerjava.core.DockerClientImpl.withDockerCmdExecFactory(
DockerClientImpl.java:60)
        at com.github.dockerjava.core.DockerClientBuilder.build(DockerClientBuil
der.java:61)
        at org.apache.camel.component.docker.DockerClientFactory.getDockerClient
(DockerClientFactory.java:118)
        at org.apache.camel.component.docker.producer.DockerProducer.process(Doc
kerProducer.java:99)
        at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncP
rocessorBridge.process(AsyncProcessorConverterHelper.java:61)
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:1
45)
        at org.apache.camel.management.InstrumentationProcessor.process(Instrume
ntationProcessor.java:77)
        at org.apache.camel.processor.interceptor.TraceInterceptor.process(Trace
Interceptor.java:163)
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryE
rrorHandler.java:468)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelIntern
alProcessor.java:197)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelIntern
alProcessor.java:197)
        at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(Time
rConsumer.java:192)
        at org.apache.camel.component.timer.TimerConsumer.run(TimerConsumer.ja
va:76)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.ClassNotFoundException: Provider org.glassfish.jersey.inter
nal.RuntimeDelegateImpl could not be instantiated: java.lang.IllegalStateExcepti
on: No generator was provided and there is no default generator registered
        at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:122)
        at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:225)
        at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:135
)
        ... 24 more
Caused by: java.lang.IllegalStateException: No generator was provided and there
is no default generator registered
        at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(S
erviceLocatorFactoryImpl.java:308)
        at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLo
catorFactoryImpl.java:293)
        at org.glassfish.jersey.internal.inject.Injections._createLocator(Inject
ions.java:138)
        at org.glassfish.jersey.internal.inject.Injections.createLocator(Injecti
ons.java:109)
        at org.glassfish.jersey.internal.RuntimeDelegateImpl.<init>(RuntimeDeleg
ateImpl.java:63)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:118)
        ... 26 more
Terminate batch job (Y/N)? ^C

C:\home\projects\universe\browser\application\apps\JumpMicro\core>

一个有效的答案是如果我 运行 在程序开始时这样做:

RuntimeDelegate.setInstance(new org.glassfish.jersey.server.internal.RuntimeDelegateImpl())

但是,我认为我不需要这样做。