WebServiceContext(有时)没有注入OSGi - Apache Karaf

时间:2017-11-22 14:38:12

标签: osgi jax-ws apache-karaf karaf blueprint-osgi

我的团队继承了构建在Apache Karaf之上的旧代码库,它有一些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注入,我们尝试为Resource指定一个名称,并确保设置了endpointInterface。

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

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

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

有没有人知道为什么大部分时间没有注入WebServiceContext,但是它被注入了几次?

编辑:我一直在阅读它,看来我与Apache Blueprint有关的例外可能与它有关:

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

启动bundle的蓝图容器   由于未解决的依赖关系,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         at org.apache.aries.blueprint.container.BlueprintContainerImpl $ 1.run(BlueprintContainerImpl.java:371)         at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)         at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)         at java.util.concurrent.FutureTask.run(FutureTask.java:266)         at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180)         at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)         在java.lang.Thread.run(Thread.java:748)

我将查看此模块的依赖项,但这可能是原因吗?还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

找到一个修复,但是,我怀疑它是解决方案。这更像是一种解决方法。

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

它没有解释的原因是为什么它之前曾经工作过几次。如果它是一个缺失的依赖,它将永远不会工作。我的猜测是,某些依赖项加载太晚了,大多数时候都会失败,现在因为我将它包含在依赖项的这个文件夹中,它在启动时加载或者在过程中足够早。老实说,我不明白发生了什么。

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