在Felix中启动并运行CXFJAX-RSWeb资源的最低要求是什么?

问题描述

我想安装CXF,which implements JAX-RS并在OSGI中运行(特别是运行Apache Felix的Apache Karaf)。

this project: cxf-osgi-activator为例,我看到工程师做出了一个设计决策,将jetty Karaf featurejax-rs Karaf feature中分离出来。两者在运行时是否存在依赖关系? jax-rs feature是否使用某种技巧(例如,来自环境:OSGI HTTP Service)来使自己侦听入站连接,还是仍然需要?也许可以用line 250文件的RestDeployer.java的解释来回答我的问题。它到底从哪里拉Server?它总是得到一个,还是依赖于jetty Karaf feature

我看了一下测试,这些测试似乎使用了iPojo或声明性服务(我很难说出区别!)来减少样板代码,但以理解为代价(因为它需要更多的信息,比我目前所掌握的知识要深。)

有关此主题的官方CXF文档不尽人意。

我的理解是,归结为:

  • 一个带有JAX-RS注释的Web资源文件,用于将入站调用映射到本地函数
  • CXF运行时(一些注册服务,用于管理从接收呼叫到返回序列化信息的生命周期)
  • 服务器(为给定端口生成线程的Java Servlet或其有效抽象)Purpose of cxf-rt-transports-http-jetty

这在OSGI中如何一起发挥作用?我还应该提到最熟悉Gradle,并且Maven pom.xml文件可能包含我不认识的内容。

我不喜欢接受的CXF web services with OSGI and Karaf答案,因为它特定于Blueprint,由于它依赖于XML,所以我不想使用它。我在这里寻求技术上的解答,以解释CXF和OSGI(例如OSGI HTTP Service)之间的关系。

相关:

解决方法

首先,简要回顾一下OSGi:

  1. OSGi是需要实现的规范
  2. Felix / Equinox是karaf中的两个实现(请参阅etc / config.properties,使用karaf.framework属性检查您使用的一个,可以对其进行更改!)
  3. Karaf是一个管理工具,它将在您执行的每个命令后使用Felix / Equinox。通常,这些命令会被OSGi定义为Felix / Equinox实现的相应行为。

因此,与您的蓝图链接的解决方案仍然是正确的,无论您的上下文如何。但是,如果您不喜欢Blueprint,则可以检查Declarative Services,将在“ spring / blueprint”世界中定义的每个“ bean”变成@ Service / @ Reference(对于OSGi原始方式更纯净)的思维方式)或使用OSGI CDI Integration,如果您习惯了捆绑包中更经典的@ Named / @ Inject思维方式,将会更加直观。

但是最后,这是完全相同的原则:您希望有一个服务器运行将其自身注册到CXF总线(通常您不应该在捆绑软件中声明它,可以使用默认值),然后进行服务注册本身在服务器中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...