我的团队继承了构建在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)
我将查看此模块的依赖项,但这可能是原因吗?还有其他想法吗?
答案 0 :(得分:0)
找到一个修复,但是,我怀疑它是解决方案。这更像是一种解决方法。
我已经将javaee-api-7.0.jar添加到我们在Karaf启动时总是加载的依赖项文件夹中,并且它每次突然开始工作。它现在按预期注入WebServiceContext。
它没有解释的原因是为什么它之前曾经工作过几次。如果它是一个缺失的依赖,它将永远不会工作。我的猜测是,某些依赖项加载太晚了,大多数时候都会失败,现在因为我将它包含在依赖项的这个文件夹中,它在启动时加载或者在过程中足够早。老实说,我不明白发生了什么。
我发布这个答案是因为它可能对其他人有所帮助,但我不会将其标记为已解决,因为我不相信这是实际修复。如果有人有适当的解决方案,请开火。