Apache CXF中的SOAP over WebSockets?

时间:2014-04-09 07:04:14

标签: java web-services soap websocket cxf

CXF是否支持WebSockets作为传输协议?

我需要支持多路复用SOAP和WebSocket协议看起来很完美作为起点。它是双向和全双工协议。 通过多路复用我的意思是客户端可以在不等待响应的情况下发送消息,并且响应可以按照它们被发送的不同顺序发回(我将使用消息/对话ID来识别请求和响应)

它应该非常类似于JMS,其中CXF可以接收请求并以任何顺序异步发送响应,例如:

我在邮件列表历史记录中查找了相关信息,但如果CXF支持WebSocket out-of-the box或者我需要实现自己的transport,我仍然不清楚这些信息吗?

2 个答案:

答案 0 :(得分:0)

我问的问题仍然有效,但有一个答案让我感到满意:)

我可以简单地使用JMS代替java.util.concurrent队列。然后,根据上下文和可伸缩性要求,我可以使用in-jvm队列或分布式队列。在这种情况下,CXF已经支持SOAP over JMS

需要确保的是每个WebSocket连接有一个队列(或者可以使用JMS Message Selector)。这是因为WebSocket A收到的对请求的响应必须使用相同的连接发回。

答案 1 :(得分:0)

我想你回答得晚一点,但是似乎CXF支持Soap over Websocket。配置它的主要问题是在适当的位置获取正确的Netty依赖关系,而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>