Java OSGI中的Websocket客户端

Java OSGI中的Websocket客户端,java,websocket,osgi,apache-karaf,tyrus,Java,Websocket,Osgi,Apache Karaf,Tyrus,我目前已经使用tyrus客户端实现了websocket客户端,websocket客户端在OSGI环境之外正常工作 问题是websocket没有在ApacheKaraf上运行。 我已经安装了websocket客户端的所有依赖项 ID | State | Lvl | Version | Name ------------------------------------------------------------------------------------ 52 |

我目前已经使用tyrus客户端实现了websocket客户端,websocket客户端在OSGI环境之外正常工作

问题是websocket没有在ApacheKaraf上运行。 我已经安装了websocket客户端的所有依赖项

 ID | State     | Lvl | Version        | Name
------------------------------------------------------------------------------------
 52 | Active    |  80 | 4.3.0          | Apache Felix Dependency Manager
 96 | Active    |  80 | 1.0            | WebSocket server API
 97 | Active    |  80 | 1.1.0          | Tyrus Server
 98 | Active    |  80 | 1.1.0          | Tyrus Core
 99 | Active    |  80 | 1.1.0          | Tyrus Container SPI
100 | Active    |  80 | 1.1.0          | Tyrus WebSocket Core
102 | Active    |  80 | 1.1.0          | Tyrus Grizzly Container
103 | Active    |  80 | 2.3.3          | grizzly-framework
104 | Active    |  80 | 2.3.3          | grizzly-http
105 | Active    |  80 | 2.3.3          | grizzly-http-server
106 | Active    |  80 | 2.3.3          | grizzly-rcm
118 | Active    |  80 | 1.0.8          | Apache Aries SPI Fly Dynamic Weaving Bundle
134 | Active    |  80 | 1.1.0          | Tyrus Client
135 | Installed |  80 | 1.0.0.SNAPSHOT | rna-websocket-client
tyrus客户端通过ServiceLoader提供实现。 因此,我使用ApacheAries SPI Fly动态编织包来获得实现。但我仍然收到了无法找到实现类的问题。错误

经过调查,我发现tyrus的客户没有添加

Provide-Capability: osgi.serviceloader; osgi.serviceloader="javax.websocket.ContainerProvider"
通知处理包所提供服务所需的清单。 在我的rna websocket客户端包中,我添加了

<Require-Capability>osgi.serviceloader; filter:="(osgi.serviceloader=javax.websocket.ContainerProvider)";cardinality:=multiple,osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)"</Require-Capability>.
这需要通知aries动态编织包我们使用javax.websocket.ContainerProvider服务

这是在OSGI中运行WebSocket的正确方法,还是有其他方法可以在OSGI中运行WebSocket? 关于这个问题的任何见解都会非常有用。

bndtools有一个。 也许这会有帮助。

在bndtools上有一个。
也许这会有所帮助。

ApacheKaraf使用PaxWeb作为Web容器中介层。 因此,最好看看相应的Pax Web示例和集成测试:

或相应的样本:

ApacheKaraf使用PaxWeb作为Web容器中介层。 因此,最好看看相应的Pax Web示例和集成测试:

或相应的样本:

有道理。这应该更容易在karaf中应用。已经用jetty实现了websocket客户端。一旦我有时间,我也会检查这个。有道理。这应该更容易在karaf中应用。已经用jetty实现了websocket客户端。一旦我有时间,我也会检查这个。websocket客户端使用了链接中提到的客户端示例,但做了一些小的修改。谢谢。websocket客户端使用了链接中提到的客户端示例,但做了一些小的修改。谢谢