当前位置: 首页 > 知识库问答 >
问题:

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

宋望
2023-03-14

我的团队继承了一个建立在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 指定一个名称,并确保设置了终结点接口。

但是,无论我们做什么,大多数情况下,服务都是在没有注入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的蓝图容器[(object class = org . Apache . Felix . service . thread io . threadio),(object class = org . Apache . Felix . service . command processor)]Java . util . concurrent . time out exception at org . Apache . Aries . blue print . container impl$1 . run(blueprintcontainerimpl . Java:371)at org . Apache . Aries . blue print . utils

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

共有1个答案

巫马磊
2023-03-14

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

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

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

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

 类似资料:
  • 由于WebServiceContext是一个资源,我试图通过编写一个生产者字段,然后使用将其注入到web服务中。这不起作用。似乎与相关,但是包含生产者字段的实例不会访问它。 有人试过吗? 请注意,使用(不使用CDI)一切正常。此外,通过将producer字段放在我的Web服务中,@可以工作(当然,这不是解决方案)

  • 我已经尝试将我的应用程序部署到Tomcat 6与Metro/泽西和Glassfish 3.1.2,但是访问WebServiceContext资源总是会导致空指针异常,除非我使用自动生成的Glassfish测试门户测试应用程序。 下面是我写的一个简单的测试方法来验证这一点: 下面是相应的web-xml(主要由Eclipse自动生成): 最有趣的是,当我通过访问Glassfish生成的URL来测试Te

  • 问题内容: 首先一些背景: 我正在研究一些基于Apache Sling的 webapp原型代码,该代码基于OSGI并在Apache Felix上运行。尽管我认为到目前为止我已经掌握了大多数概念,但我对OSGI还是比较陌生。但是,令我感到困惑的是,我找不到一个“完整的”依赖项注入(DI)框架。我已经使用声明式服务(DS)成功地使用了基本的DI。但是我的理解是DS可以用作参考- 我该如何处理?-OSG

  • 我正在尝试使用Spring3.2.1创建spring-mvc测试。根据一些教程,我认为这将是直接的。 下面是我的测试: 下面是我的相关pom.xml: 我有以下测试配置类: 我的理解是,添加将强制Spring注入它。但是当我从Eclipse中运行这个测试时,我得到: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException

  • 我尝试的方法之一是在从MessageBusListener创建FlowListener实例的同时传递服务引用。然而,当参数化服务被停用和激活回来时,我认为OSGi服务将创建一个新的服务实例并绑定到MessageBusListener,但是FlowListener仍然会有一个过时的引用。 期待其他方法,可以满足我的要求。

  • 我使用RoutingDataSource为应用程序的每个租户动态创建数据源。8-12小时后,应用程序与数据库失去连接,我得到了jpa事务异常。我发现以下属性负责验证和维持数据库连接,所以我将它们放在了应用程序中。财产。 数据源bean是在下面的类中创建的。如何将上述属性注入每个目标数据源?