Hi Sergey,
I made the recommended changes (upgrade Atmosphere and disable the async
feature of CXFServlet), I got this error when trying to connect.
Seems there is a mismatch between the used CXF version (3.1.7) and Atmosphere
(2.4.3).
Best regards,
Anthony
SEVERE: Servlet.service() for servlet [CXF Bootstrap] in context with path
[/cxf31_websocket] threw exception [Servlet execution threw an exception] with
root cause
java.lang.NoSuchMethodError:
org.atmosphere.cpr.AtmosphereRequest.wrap(Ljavax/servlet/http/HttpServletRequest;)Lorg/atmosphere/cpr/AtmosphereRequest;
at
org.apache.cxf.transport.websocket.atmosphere.AtmosphereWebSocketServletDestination.invoke(AtmosphereWebSocketServletDestination.java:73)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:299)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:223)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:274)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]]
Sent: mercredi 28 septembre 2016 17:54
To: [email protected]
Subject: Re: CXF 3.1 + Tomcat 8 + JAR-RS + Atmosphere + WebSocket
Hi Anthony
It all looks OK, except that you select the older Atmosphere version, it
has to be 2.4.3 - so start from removing that pom section where you get
an older version from the non-Central maven location.
The other thing - enabling async (suspended) continuations is not needed
for WebSocket (AFAIK), I'm not sure if it interferes, try disabling this
CXFServlet setting if using the latest Atmosphere does not help (it
would an issue of its own - but for now lets try to isolate where the
problem is)
Sergey
On 28/09/16 16:26, MULLER, Anthony wrote:
> Hello CXF Experts, Sergey, Aki,
>
> I have some issues to implement a simple test using WebSocket with CXF 3.1.7,
> in a Tomcat 8 Servlet container.
>
> To make troubleshooting easier, I shared my demo project (based on the
> official CXF samples written by Aki):
> https://github.com/AnthonyMullerPlayground/cxf31_websocket
>
> The webapp context is "cxf31_websocket" and it contains a simple RESTful
> service running under "/services/users" path.
>
> The project also contains a basic index.html webpage to test the websocket.
>
> CXF is bootstrapped using: org.apache.cxf.transport.servlet.CXFServlet
>
> Spring is used to and configured this way with a "beans.xml" file:
>
> <jaxrs:server id="websocketService" address="/"
> transportId="http://cxf.apache.org/transports/websocket" />
> <context:component-scan base-package="com.sap.businessobjects.amuller"/>
>
> When I check the websocket using Chrome, the following error is displayed in
> the Network panel of the developer tools:
>
> Request headers:
> GET ws://localhost:8080/cxf31_websocket/services HTTP/1.1
> Host: localhost:8080
> Connection: Upgrade
> Pragma: no-cache
> Cache-Control: no-cache
> Upgrade: websocket
> Origin: http://localhost:8080
> Sec-WebSocket-Version: 13
> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
> Accept-Encoding: gzip, deflate, sdch
> Accept-Language: en-US,en;q=0.8,fr;q=0.6
> Sec-WebSocket-Key: Uc/E4OEE/BnKx/EvHUgLtQ==
> Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
>
> Response headers:
> HTTP/1.1 501 Not Implemented
> Server: Apache-Coyote/1.1
> X-Atmosphere-first-request: true
> X-Atmosphere-tracking-id: aeeb9f45-62e8-45b4-9d37-4657988e20ec
> X-Atmosphere-error: Websocket protocol not supported
> Transfer-Encoding: chunked
> Date: Wed, 28 Sep 2016 15:21:58 GMT
> Connection: close
>
> No error is displayed in the Eclipse console... I'm stuck because I didn't
> really get the magic behind the scene. It seems that the transportId
> attribute is enabling the full WebSocket logic?
> (transportId="http://cxf.apache.org/transports/websocket")
>
> Thanks for your help and explanations.
>
> Best regards,
> Anthony MÜLLER
>
>
>
>