【问题标题】:WebServiceContext (sometimes) not injected with OSGi - Apache KarafWebServiceContext(有时)未注入 OSGi - Apache Karaf
【发布时间】:2018-05-06 08:22:49
【问题描述】:

我的团队继承了一个建立在 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 注入,我们尝试为资源指定名称,并确保设置了 endpointInterface。

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

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

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

有没有人知道为什么 WebServiceContext 大部分时间都没有被注入,但有时却被注入了?

编辑:我一直在阅读它,我在 Apache Blueprint 中遇到的一个例外似乎与它有关:

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

启动捆绑包的蓝图容器 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) 在 java.lang.Thread.run(Thread.java:748)

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2016-07-16
      • 2013-05-23
      相关资源
      最近更新 更多