Apache CXF 中基于 WebSocket 的 SOAP?
Posted
技术标签:
【中文标题】Apache CXF 中基于 WebSocket 的 SOAP?【英文标题】:SOAP over WebSockets in Apache CXF? 【发布时间】:2014-04-09 07:04:13 【问题描述】:CXF 是否支持将 WebSockets 作为传输协议?
我需要支持多路复用的 SOAP 和 WebSocket 协议作为起点看起来很完美。它是一种双向全双工协议。 通过多路复用,我的意思是客户端可以发送消息而无需等待响应,并且响应可能会按照它们发送的不同顺序被发送回来(我将使用消息/对话 ID 来识别请求和响应)
它应该与 JMS 非常相似,其中 CXF 可以以任何顺序异步接收请求和发送响应,例如:
我在邮件列表历史中查找了信息,但我仍然不清楚 CXF 是否支持WebSocket out-of-the box 或者我需要实现自己的transport?
【问题讨论】:
【参考方案1】:我问的问题仍然有效,但有一个答案让我满意:)
我可以简单地使用 JMS,而不是 java.util.concurrent
队列。然后,根据上下文和可扩展性要求,我可以使用 in-jvm 队列或分布式队列。在这种情况下,CXF 已经支持SOAP over JMS。
需要确保的是每个 WebSocket 连接都有一个队列(或者可以使用JMS Message Selector)。这是因为 WebSocket A 收到的对请求的响应必须使用相同的连接发回。
【讨论】:
【参考方案2】:您好,我想答案有点晚了,但似乎 CXF 支持 Soap over Websocket。配置它的主要问题是获得正确的网络依赖关系,这在 CXF 网站上没有正确描述。以下帖子中描述了对我有用的依赖项列表:
SOAP over Websocket with Appache CXF and Embedded Jetty
这篇文章包含一个使用 websocket 传输的 CXF soap 端点的工作示例。
我将总结使其工作的必要依赖项:
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.0.39</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-buffer</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-codec-http</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-transport</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-common</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-codec</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.56.Final</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-websocket</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.3.2</version>
</dependency>
【讨论】:
以上是关于Apache CXF 中基于 WebSocket 的 SOAP?的主要内容,如果未能解决你的问题,请参考以下文章