WebServiceContext(有时)没有注入OSGi-ApacheKaraf

WebServiceContext(有时)没有注入OSGi-ApacheKaraf,osgi,jax-ws,apache-karaf,karaf,blueprint-osgi,Osgi,Jax Ws,Apache Karaf,Karaf,Blueprint Osgi,我的团队继承了一个构建在ApacheKaraf之上的旧代码库,它有一些JAX-WS服务。我们目前遇到一个问题,这个对象并不总是被注入Bean 我们的服务定义为: @WebService(serviceName = "XXXSoapService", portName = "XXXSoapPort", endpointInterface = "com.XXX.service.XXXSoapInterface", targetNamespace = "http://xxx.xx/") @Bindin

我的团队继承了一个构建在ApacheKaraf之上的旧代码库,它有一些JAX-WS服务。我们目前遇到一个问题,这个对象并不总是被注入Bean

我们的服务定义为:

@WebService(serviceName = "XXXSoapService", portName = "XXXSoapPort", endpointInterface = "com.XXX.service.XXXSoapInterface", targetNamespace = "http://xxx.xx/")
@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
public class XXXSoapService implements XXXSoapInterface {
  @Resource
  WebServiceContext context;

  public void doXXX() {
    context.getMessageContext();    // throws nullpointerexception
  }
}
我们已经尝试了在网上找到的几种选择。我们尝试了setter注入,尝试为资源指定一个名称,并确保设置了endpointInterface

然而,无论我们做什么,大多数时候,服务都是在不注入WebServiceContext的情况下实例化的。有时,它是有效的,这让我们相信它可能与KARAF的工作方式有关,它试图在WebServiceContext可用之前注入它

我们在org.apache.karaf.features.xml的featuresBoot部分中有CXF

我对OSGI和Karaf的理解非常基本,所以我真的不知道该找什么

有人知道为什么WebServiceContext大部分时间不被注入,但有时会被注入吗

编辑:我一直在读这方面的文章,似乎Apache Blueprint的一个例外可能与此有关:

启动包的blueprint容器的步骤 io.hawt.hawtio karaf terminal/2.0.0由于未解析的依赖关系 [(objectClass=org.apache.felix.service.threadio.threadio), (objectClass=org.apache.felix.service.command.CommandProcessor)] java.util.concurrent.TimeoutException 位于org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:371) 位于org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) 位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)处 位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 运行(Thread.java:748)


我将研究此模块的依赖关系,但这可能是原因吗?还有其他想法吗?

找到了解决办法,但我怀疑这是解决办法。这更像是一项工作

我已经将javaee-api-7.0.jar添加到了一个依赖项文件夹中,我们总是在Karaf启动时加载它,每次它都突然开始工作。它现在按预期注入WebServiceContext

但它无法解释为什么以前它会起作用。如果它是一个缺失的依赖项,它将永远不会工作。我的猜测是有些依赖项加载得太晚了,大多数情况下都会失败,现在因为我把它包含在依赖项文件夹中,所以它是在启动时加载的,或者是在过程中足够早的时候加载的。我真的不明白发生了什么


我发布这个答案是因为它可能会帮助其他人,但我不会将它标记为已解决,因为我不相信它是实际的解决方案。如果有人有合适的解决方案,请立即开火。

找到了解决方案,但我怀疑这是解决方案。这更像是一项工作

我已经将javaee-api-7.0.jar添加到了一个依赖项文件夹中,我们总是在Karaf启动时加载它,每次它都突然开始工作。它现在按预期注入WebServiceContext

但它无法解释为什么以前它会起作用。如果它是一个缺失的依赖项,它将永远不会工作。我的猜测是有些依赖项加载得太晚了,大多数情况下都会失败,现在因为我把它包含在依赖项文件夹中,所以它是在启动时加载的,或者是在过程中足够早的时候加载的。我真的不明白发生了什么

我发布这个答案是因为它可能会帮助其他人,但我不会将它标记为已解决,因为我不相信它是实际的解决方案。如果有人有合适的解决方案,请立即开火

[Blueprint Extender: 3] ERROR org.apache.aries.blueprint.container.BlueprintContainerImpl - Unable