You do not have to use StreamingOutput, see

https://github.com/apache/cxf/blob/master/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookStoreWebSocket.java#L70

or if StreamingOutput like behavior is needed then:

https://github.com/apache/cxf/blob/master/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookStoreWebSocket.java#L111

Sergey


On 12/08/16 10:01, CLEMENT Jean-Philippe wrote:
That said, I did not find an easy way to serialize objects when sending them 
from the server through the web socket. I mean, the StreamingOutput.write() 
provides an OutputStream; the OutputStream object is very low level / basic. 
Could be great to have instead something like a SocketOutputStream which allows 
to write objects.

The SocketOutputStream would be tied to the type defined in the @Produces tag:
        * StreamingOutput would evolve to 
StreamingOutput.write(SocketOutputStream output) throws ...

        * where SocketOutputStream would contain the extra method 
SocketOutputStream.write(Object obj) throws ...

        * for instance:
                @GET
                @Path("websocket/sample")
                @Produces(MediaType.APPLICATION_JSON) // transformation to be 
used for SocketOutputStream.write(Object)
                public StreamingOutput wsSample(....) { ... } // 
SocketOutputStream registration

        * then the server could easily sent events using SocketOutputStream: 
socketOS.write(someObjectInstance), someObjectInstance which would be 
serialized as JSON in the example above.

Do you think this is relevant and can be added to CXF?

Regards,
JP

-----Message d'origine-----
De : CLEMENT Jean-Philippe [mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : vendredi 12 août 2016 10:15
À : users@cxf.apache.org
Objet : RE: Error during WebSocket handshake: Unexpected response code

Good. I'm wondering whether the socket.binaryType="blob" is local to the client or also 
send to the server. If sent, CXF may use it so it would be "automatic" (set by the 
client) with no extra server configuration. That said, if the binaryType is not sent then that 
option could be sent in the request header:
Request = Request-Line CRLF
             *(( header ) CRLF)
             CRLF
             [ body ]

...so something like
        
ws://host:port/cxf/some/sample/r/norg.atmosphere.websocket.binaryWrite=true
or
        ws://host:port/cxf/some/sample/r/nmode=binary
or - if that makes sense
        ws://host:port/cxf/some/sample/r/nmode=blob
        ws://host:port/cxf/some/sample/r/nmode=arraybuffer

JP

-----Message d'origine-----
De : Aki Yoshida [mailto:elak...@gmail.com] Envoyé : jeudi 11 août 2016 19:00 À 
: users@cxf.apache.org Objet : Re: Error during WebSocket handshake: Unexpected 
response code

This (i.e., customizing atmosphere framework configuration) was on the todo 
list...
The atmosphere framework in CXF is currently set up with some predefined 
options and there is no way to change this setting.
The only customizable setting is to add or change atmosphere interceptors.

For your particular case, you will need to set property 
org.atmosphere.websocket.binaryWrite to true.

That means, we will need either
- a way to pass some property bag from cxf bus to set these properties or
- a new AtmosphereFeature that will allow those parameters plus the 
interceptors/handlers to be customized.

I created  CXF-7007 to track this issue.

regards, aki

2016-08-11 16:36 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
The browser seems ok, so it would mean that CXF does not support WebSocket 
binary mode.

Is there a plan for CXF to support the binary mode?

Regards,
JP

-----Message d'origine-----
De : CLEMENT Jean-Philippe
[mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : mercredi 10 août 2016 17:48
À : users@cxf.apache.org
Objet : RE: Error during WebSocket handshake: Unexpected response code

Aki,

Your support is a great relief :) I succeeded in having strings flowing from 
CXF server to WebSocket clients!

I would like to do the same with bytes instead of strings. So I changed the server code to 
@Produces(MediaType.APPLICATION_OCTET_STREAM), and, on the client side I set 
socket.binaryType="blob" (also tried "arraybuffer").

Unfortunately the client events are still strings. I'm wondering where the 
problem comes from, client/browser or server/CXF. Does CXF support binary 
WebSocket communication? How?

Regards,
JP

-----Message d'origine-----
De : Aki Yoshida [mailto:elak...@gmail.com] Envoyé : mercredi 10 août
2016 16:57 À : users@cxf.apache.org Objet : Re: Error during WebSocket
handshake: Unexpected response code

Hi JP,
CXF's websocket transport uses one of the atmosphere protocol interceptors to 
support the jaxrs calls. The protocol interceptor makes sure the necessary meta 
information is included in the websocket message so that the correct operation 
is found. This is similar to what a plain jaxrs rest call consists of the 
content part and the header part (i.e.g, the http method and the request path). 
Without this information, you cannot choose the correct jaxrs operation if 
there are more than one under the root resource path or have specific 
produces/consumes options.

Depending on which protocol handlers that you use, you have to format the 
message differently. For the default websocket protocol binding, you can look 
at this document http://cxf.apache.org/docs/websocket.html and also look at the 
node.js client and the plain javascript client in samples/jax_rs/websocket.
The other atmosphere jaxrs protocol interceptors available are Swaggersocket's 
io.swagger.swaggersocket.server.SwaggerSocketProtocolInterceptor and 
atmosphere's org.atmosphere.interceptor.SimpleRestInterceptor.

regards aki

2016-08-10 14:31 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
Hi Aki,

A little step closer to get the WebSocket running with CXF. CFX 3.1.7 does not display 
the " Websocket protocol not supported" error anymore. But I don't understand 
how CXF works and what is expected.

Browser side, examples sends a string when the web socket is connected, for instance 
ws.send("Hello"), which fails with CXF with the IOException:
        invalid request: Hello

Looking at CXF code (WebSocketUtils.readHeaders()), the string is analyzed instead of being sent as 
is to my handling method; CXF expects a string formatted as "<method> <URI>". 
Do you understand why? Is there a doc for this?

Regards,
JP

-----Message d'origine-----
De : CLEMENT Jean-Philippe
[mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : mardi 9 août 2016 10:30
À : users@cxf.apache.org
Objet : RE: Error during WebSocket handshake: Unexpected response
code

Hi Niten,

Yes right, I went back to Karaf 4.0.4 and my sample starts properly, and I don't get the 
"src-resolve: Canot resolve the name 'ptp:ParameterizedInt' to a(n) 'type 
definition' component." error anymore.

Thanks!

Regards,
JP

-----Message d'origine-----
De : Niten Aggarwal [mailto:niti...@hcl.com] Envoyé : mardi 9 août
2016 01:25 À : users@cxf.apache.org Objet : RE: Error during
WebSocket
handshake: Unexpected response code

It's working for me with Karaf 4.0.4 which I reported in same aries ticket. 
Issue is fixed with blueprint-core 1.6.2 but karaf 4.0.5 points to 1.6.1.
It doesn’t fail for all blueprint bundles but not able to figure out root cause.

Thanks,
Niten Aggarwal


-----Original Message-----
From: Aki Yoshida [mailto:elak...@gmail.com]
Sent: Monday, August 08, 2016 3:52 PM
To: users@cxf.apache.org
Subject: Re: Error during WebSocket handshake: Unexpected response
code

Hi JP,
regarding the firewall issue, I just saw people are talking about some issue 
with karaf-4.0.5 with cxf.
http://cxf.547215.n5.nabble.com/Blueprint-NamespaceHandler-issue-with
- karaf-4-0-5-td5770550.html You might want to use an older Karaf
until the issue has been clarified and resolved.

2016-08-09 0:45 GMT+02:00 Aki Yoshida <elak...@gmail.com>:
Hi JP,
If you are using Karaf behind a firewall, you will have to make sure
all the referenced artifacts are either locally available or
accessible over the http proxy (and this needs to be told to Karaf
via etc/org.ops4j.pax.url.mvn.cfg).

I can't tell what is happening in your setup. Which bundle is not
starting? All the cxf schemas should be loadable from the relevant
cxf bundles themselves without accessing their real physical schema
locations. So, once the bundles are all available, you don't even
need an external network connection to run cxf samples. Have you
tried a plan cxf sample on your Karaf instance?

atmosphere.js and node.js won't be interfered by a firewall. What
you need to make sure is that you will have to set up your http
proxy for npm, so that you can install the required node.js
libraries via the npm install command.

Regarding the protocol setting of atmosphere where you saw
"websocket", that is not the url but just the name to tell
atmosphere to use websocket as the preferred protocol. You can also
use a plain javascript client. See the README file of the standalone
websocket sample.

regards, aki

2016-08-08 15:37 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
I went a little further. I changed the demo pom.xml file and changed 
3.1.7-SNAPSHOT to 3.1.7. The demo compiles and installs properly. So I went to 
the test part which is a javascript which depends on atmosphere.js... 
unfortunately once again I experience firewall issues.

I opened the javascript file and tried to understand how it works. It seems the test 
makes no use of the WebSocket API but uses a URL with a "websocket" protocol. 
I'm not too sure the URL is the standard way of getting a web socket (?).

Then I tried my CXF example as long with CXF 3.1.7 but now the service fails to 
start with the error:
        src-resolve: Canot resolve the name 'ptp:ParameterizedInt' to a(n) 
'type definition' component.
        org.xml.sax.SAXParseException; systemId:
bundleresource://85.fwk17319689/schemas/blueprint/core.xsd;
lineNumber: 76; columnNumber: 87

Where bundle 85 is "Apache CXF Core" (3.1.7). Seems I have no luck with web 
sockets and CXF :) ...could you please help?

Thanks!

Regards,
JP

-----Message d'origine-----
De : CLEMENT Jean-Philippe
[mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : lundi 8 août 2016 14:54
À : Aki Yoshida
Cc : users@cxf.apache.org
Objet : RE: Error during WebSocket handshake: Unexpected response
code

Hello Aki,

The CXF-3.1.7 was released and installs properly in Karaf. So I went to the 
demo but I failed to find the 3.1.7 version.

The "3.1.x-fixes" branch  contains the 3.1.8-SNAPSHOT and the "cxf-3.1.7" tag 
contains the 3.1.7-SNAPSHOT. We still do have issues with the snapshot repos proxies so the 
snapshot versions fail to compile.

Is there a way to get the 3.1.7 demo?

Thank you.

Regards,
JP

-----Message d'origine-----
De : Aki Yoshida [mailto:elak...@gmail.com] Envoyé : vendredi 29
juillet 2016 15:34 À : CLEMENT Jean-Philippe Cc :
users@cxf.apache.org Objet : Re: Error during WebSocket handshake:
Unexpected response code

or wait a few days and try cxf-3.1.7's feature.


2016-07-29 15:14 GMT+02:00 Aki Yoshida <elak...@gmail.com>:
My mistake cxf-3.1.x uses atmosphere 2.3.x.

But cxf-3.1.6 doesn't come with the jax_rs_websocket_osgi sample,
so there is no
mvn:org.apache.cxf.samples/jax_rs_websocket_osgi/3.1.6
unless you have taken the 3.1.x-SNAPSHOT version and renamed it
and built it locally.
Please try the whole procedure using either 3.2.0-SNAPSHOT or 3.1.8-SNAPSHOT.
regards, aki

2016-07-29 10:38 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
Thank you Aki for your support. I strictly followed the instructions contained 
in the demo readme, i.e.:
        feature:repo-add cxf 3.1.6
        feature:install cxf-jaxrs cxf-transports-websocket-server
        install -s
mvn:org.apache.cxf.samples/jax_rs_websocket_osgi/3.1.6

It's when installing the "cxf-transports-websocket-server" feature that the 
org.atmosphere.runtime 2.3.5 is added. So, it would mean that the feature has a problem, 
right?

On the other hand we do have a problem with our Maven proxy here, and I can't 
get CXF 3.2.0-SNAPSHOT yet. Will try asap.

Regards,
JP

-----Message d'origine-----
De : Aki Yoshida [mailto:elak...@gmail.com] Envoyé : vendredi 29
juillet 2016 00:32 À : CLEMENT Jean-Philippe Cc :
users@cxf.apache.org Objet : Re: Error during WebSocket handshake:
Unexpected response code

I don't know how you got atmosphere 2.3.5 deployed.
both cxf 3.2.x and 3.1.x are compatible with atmosphere 2.4.x but not with 
2.3.x.
I just verified both cxf master (3.2.0-SNAPSHOT) and 3.1.x
(3.1.8-SNAPSHOT) on both karaf 3.0.6 and 4.0.5.
regards, aki

2016-07-28 11:23 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
Also in Karaf logs I found a warn trace which corresponds to the 501 code:
        AsynchronousProcessor | 106 - org.atmosphere.runtime -
2.3.5
| Websocket protocol not supported

Does CXF 3.1.6 support Websocket? Is there anything extra to configure or add?

Thanks!

Regards,
JP

-----Message d'origine-----
De : CLEMENT Jean-Philippe
[mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : jeudi 28 juillet 2016 10:53 À : users@cxf.apache.org
Objet
: RE: Error during WebSocket handshake: Unexpected response code

Hello Aki,

As I don't have access to GIT (company internet access restriction), I 
downloaded CXF as long with your demo.

My first trial using the tag 3.1.6 leaded to an archive which does not contain 
the demo for OSGi.
My second trial was using the branch 3.1.x which contains the
demo in version 3.1.7-SNAPSHOT but fails to compile

My last attempt was using the trunk which contains the demo in version 
3.2.0-SNAPSHOT and compiles :) ...but fails to start with CXF 3.1.6 (for some 
reason the feature:repo-add cxf 3.2.0-SNAPSHOT fails).

Still, I'm close to have my test working. Just blocked on the acknowledgement 
501 issue (still with CXF 3.1.6).

JP

-----Message d'origine-----
De : Aki Yoshida [mailto:elak...@gmail.com] Envoyé : mercredi 27
juillet 2016 17:58 À : users@cxf.apache.org Objet : Re: Error
during WebSocket handshake: Unexpected response code

As Sergey mentioned already, you will need to build the websocket sample on 
your own.
And this is all described in README.txt of the websocket sample code folder.
You must have read it partially as you knew the sample artifact name.
But you will have to go through the build part described in that document and 
shouldn't just jump into the middle of the document.

2016-07-27 16:56 GMT+02:00 CLEMENT Jean-Philippe
<jean-philippe.clem...@fr.thalesgroup.com>:
Sure, could you please provide the URL where I may find your WebSocket demo?

Regards,
JP

-----Message d'origine-----
De : Sergey Beryozkin [mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 16:39 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

jax_rs_websocket_osgi is the demo itself, you need to build it.

If you feel the whole CXF and Websockets/etc is new then perhaps you can start 
with a websocket demo which I have built and confirmed is working, test the 
actual WebSocket support, see if it works the way you expect it and then finish 
off with making a websocket_osgi demo work.

websocket_osgi demo needs to be built manually - it won;t be in Central.
Download the appropriate CXF distribution - and build this demo inside that 
distribution. Or checkout CXF master or 3.1.6 from GIT.
I've just built this demo in my 3.2.0-SNAPSHOT and it is avail in the local 
Maven repo.

But may be it will be simpler to start from a 'plain' websockets demo.

Sergey

On 27/07/16 17:12, CLEMENT Jean-Philippe wrote:
Yes you are right. Also I'm a CXF and webstuff newbie which
does not help :P

I made a clean installation of our Karaf assembly, then followed the readme. 
The CXF 3.2.0-SNAPSHOT was not found, but the installation succeeded with the 
3.1.6. Then the demo was not found (neither 3.1.6 nor 3.2.0):
  install -s
mvn:org.apache.cxf.samples/jax_rs_websocket_osgi/3.1.6

I was not able to find the jax_rs_websocket_osgi in maven central either. As a 
fallback, I installed my test and went back to the client trace stating that 
the WebSocket connection failed due to the unexpected response 501.

Maybe it is due to the CXF version 3.1.6 instead of 3.2.0-SNAPSHOT?

Regards,
JP

-----Message d'origine-----
De : Sergey Beryozkin [mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 15:46 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

See may last email on the rel address and please do work with
the demo first. Sometimes users need to dive a bit into the
details of a given demo :-)

Sergey


On 27/07/16 16:42, CLEMENT Jean-Philippe wrote:
I had to add cxf-http-jetty which is not described in the
readme
- I'm not too sure this sample was tested on Karaf 4 (4.0.4)...
now I'm getting error 501 ... :D

JP

-----Message d'origine-----
De : Sergey Beryozkin [mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 15:34 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

Look at that demo and check README/etc, and make it work in Karaf.
I haven't written it but looks like it has all the info
needed

Sergey
On 27/07/16 16:25, CLEMENT Jean-Philippe wrote:
Good, I went to 
https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/websocket_osgi
 and added the missing cxf-transports-websocket-server feature.

Things get better :) ... now I get NoClassDefFoundError: 
org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.

Well, starting from a Karaf basic custom assembly, what features am I expected 
to add as bootFeatures in order to get CXF+WebSockets running?

Regards,
JP

-----Message d'origine-----
De : Sergey Beryozkin [mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 15:07 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

Look at the websocket_osgi demo done by Aki

Sergey

On 27/07/16 15:55, CLEMENT Jean-Philippe wrote:
Haha, it seems I'm in the "servlet container mode" and not the "Jetty embedded 
mode"... so I would have, as far as I understood, set both the address as a path and the 
transportId to http://cxf.apache.org/transports/websocket.

I did try but I get the following exception:
BusException: No DestinationFactory was found for the
namespace http://cxf.apache.org/transports/websocket

What should I add to get rid of this exception?

Regards,
JP

-----Message d'origine----- De : CLEMENT Jean-Philippe
[mailto:jean-philippe.clem...@fr.thalesgroup.com]
Envoyé : mercredi 27 juillet 2016 14:44 À :
users@cxf.apache.org Objet
: RE: Error during WebSocket handshake: Unexpected response
code

I don't find the issue but something is strange; the /cxf page displays:
   Endpoint address:
http://localhost:8181/cxfws://localhost/socket

My blueprint is:
   <jaxrs:server id="something"
address="ws://localhost/socket">

The address parsing seems strange isn't it?

Regards,
JP

-----Message d'origine----- De : Sergey Beryozkin
[mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 14:35 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

I've run a demo which Aki did and it works fine.
Yes make sure 'ws:' (or wss:) is used, it enables the
loading of the CXF WebSocket transport which can support both WebSocket and 
'plain'
HTTP

Cheers, Sergey
On 27/07/16 13:49, CLEMENT Jean-Philippe wrote:
Hi Sergey,

I added "socket.binaryType= 'arraybuffer';" but I get the same error. I'm not 
too sure if it is used or not as I don't know when WebSocket tries to connect, and 
setting socket.binaryType or socket.binarytype or socket.whatEver does not display any 
error.

Also, I'm wondering about the CXF configuration, is the binding to a separate server configured 
with a "ws://..." (the "ws" part) address mandatory?

Regards,
JP

-----Message d'origine----- De : Sergey Beryozkin
[mailto:sberyoz...@gmail.com] Envoyé :
mercredi
27 juillet 2016 12:34 À : users@cxf.apache.org Objet : Re:
Error during WebSocket handshake: Unexpected response code

Hi
On 27/07/16 12:26, CLEMENT Jean-Philippe wrote:
Dear CXF experts,

I'm trying to connect a web client to a CXF WebSocket. The browser logs the error 
"WebSocket connection failed: Error during WebSocket handshake: Unexpected response 
code: XXX". The XXX response code changes depending on the @Produces annotation: 200 
when text/plain, 406 when text/*.

406 with text/* can be explained by the fact the websocket
client does not know what HTTP Accept is and the spec
requires that when the final response type has a wildcard
subtype (with the only exception being
application/*) then it is 406.
The server Java looks like this:
@GET
@Path("monitor")
@Produces("text/*")
public StreamingOutput greetMonitor() {
       return stream -> {
        stream.write("Ok".getBytes());
        stream.flush();
       };
}

The client Javascript looks like this:
var socket= new
WebSocket("ws://myurlwithsameportaswebservice/cxf/test/monitor"
)
;

socket.onmessage= function(e) { console.log(e.data); };

What's wrong?
Can you please look at
https://github.com/apache/cxf/blob/master/distribution/src
/
m
ai
n/
r
e l e a s
e/samples/jax_rs/websocket/src/main/resources/index.html

may be you need to set a socket type

Cheers, Sergey


Regards,
JP



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/




::DISCLAIMER::
---------------------------------------------------------------------
-
---------------------------------------------------------------------
-
--------

The contents of this e-mail and any attachment(s) are confidential and intended 
for the named recipient(s) only.
E-mail transmission is not guaranteed to be secure or error-free as information 
could be intercepted, corrupted, lost, destroyed, arrive late or incomplete, or 
may contain viruses in transmission. The e mail and its contents (with or 
without referred errors) shall therefore not attach any liability on the 
originator or HCL or its affiliates.
Views or opinions, if any, presented in this email are solely those of the 
author and may not necessarily reflect the views or opinions of HCL or its 
affiliates. Any form of reproduction, dissemination, copying, disclosure, 
modification, distribution and / or publication of this message without the 
prior written consent of authorized representative of HCL is strictly 
prohibited. If you have received this email in error please delete it and 
notify the sender immediately.
Before opening any email and/or attachments, please check them for viruses and 
other defects.

---------------------------------------------------------------------
-
---------------------------------------------------------------------
-
--------


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Reply via email to