Hi Sergey, > > So what difference in formats is there when you try to switch to JAX-RS (with > JAXB 2.1 being the default provider) ? When you switch, do you issues with > all the XML samples you posted or is it with PUT only ?
When I switch to JAX-RS with it's default provider I have problems with all the methods that are in the XML samples. But for PUT or POST I'm getting a java error, so it may be the qualified namespace that Daniel mention, I trying to fix and test it again. On the other side there are differences with GET requests. For the service "Get User", I get: Request: GET http://localhost:8080/rpc/rest/userService/users/user1 Responses: With HTTP-binding in 2.0.x: <ns1:getUserByUsernameResponse xmlns:ns1="http://jivesoftware.com/clearspace/webservices"> <return> <email>[email protected]</email> <ID>2001</ID> <name>user1 user1</name> <username>user1</username> </return> </ns1:getUserByUsernameResponse> With JAX-RS with its default provider in 2.2.2: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <User> <email>[email protected]</email> <ID>2001</ID> <name>user1 user1</name> <username>user1</username> </User> And for service "Get Users" Request GET http://localhost:8080/rpc/rest/userService/users Responses: With HTTP-binding in 2.0.x: <ns1:getUsersResponse xmlns:ns1="http://jivesoftware.com/clearspace/webservices"> <return> <email>[email protected]</email> <ID>2003</ID> <name>User Test One</name> <username>userTest1</username> </return> <return> <email>[email protected]</email> <ID>2002</ID> <name>user2 user2</name> <username>user2</username> </return> </ns1:getUsersResponse> With JAX-RS with its default provider in 2.2.2: ".No message body writer found for response class : ArrayList." > As Dan said, you can register a Stax XmlStreamReader or Writer (in CXF > interceptors or JAX-RS filters). For ex, you can check if it's PUT and no > namespace is there and adapt as needed - let us know please if/when you > decide to go this route to make a smoother migration, we can provide some > code samples... Well, PUT services aren't working right now with JAX-RS in 2.2.2, but they work with HTTP-binding in that version. If we couldn't find a solution for GET with HTTP-binding in 2.2.2 then yes, I'll need to go this route and I'll appreciate code samples :). But for now I just prefer to see how HTTP-binding fix goes before going this way that will imply code migration and a fix to the xml messages format issue. Thank you, Gabriel > > > > > -----Original Message----- > From: Gabriel Guardincerri [mailto:[email protected]] > Sent: 15 June 2009 20:16 > To: [email protected] > Subject: Re: How to migrate REST HTTP-binding to JAX-RS and keep the xml > messages format? > > Hi Dan and Sergey, > >>> The main change between them that MAY affect the XML binding is going from >>> JAXB 2.0.x to JAXB 2.1.x. The generated code from xjc can be quite >>> different and could potentially change things. > > Dan, it may be that change. Our code works on 2.0.7, but it doesn't > work on 2.1.5 nor 2.2.2. If there is a way to fix that I'll really > appreciate it. We want to use the latest version 2.2.2 and JAX-RS for > some new web services that we need to build. But we need to keep > backward compatibility with the old web services that we have. So the > best, meaning less effort, option is to have a fix for HTTP-binding in > version 2.2.2. We are planning to migrate this old services, but not > now. > > The problem is only with URL params. All our GET and DELETE services > that use some URL param don't work, they always get null values. > > For example > > For this service > > @WebMethod > @Get > @HttpResource(location = "/users/{username}") > WSUser getUserByUsername(@WebParam(name = "username")String username) > throws UserNotFoundException; > > Using this request > > GET http://localhost:8080/rpc/rest/userService/users/user1 > > It doesn't work. The username param has a null value. Is there a way > to get a patch for that? > >> It is interesting. It would be helpful if Gabriel could post two sample XML >> instances, one showing what the clients are currently getting and what they >> would get if CXF 2.2.2 were used, we can proceed from there... > > Sergey, actually when using HTTP-binding with CXF 2.2.2 we get the > same XML, the problem is what I mention above, that some methods don't > get params. So we were thinking on migrating them to JAX-RS to make it > work, but we need to configure it to use the same XML messages format > that we have for HTTP-binding. I'm attaching some xml samples > request/response and the interface with the annotations. Sorry that my > first post wasn't a clear. > > Anyway, we prefer to just apply a patch to CXF 2.2.2 to make it work, > instead of migrating our old stuff. We are planning to migrate them > since it was deprecated, but if possible not for our next version, we > are short of time for this release and this problem was unexpected. > > Thanks in advance, > > Gabriel > > On Mon, Jun 15, 2009 at 1:12 PM, Sergey Beryozkin<[email protected]> > wrote: >> Hi Dan, >> >> >> >>> >>> Sergey, >>> >> >> >>> >>> I know a bug was fixed in the HTTP binding for 2.2.2 in regards to the >>> root element things. I'm wondering if that may have affected this or not. >>> >> >> possibly... >> >> thanks, Sergey >> >>> >>> Dan >>> >>> >>> >>> On Sun June 14 2009 3:47:26 pm Sergey Beryozkin wrote: >>>> >>>> Hi, >>>> >>>> As far as I'm aware no significant changes have been made to the HTTP >>>> binding recently, I haven't done any work with it for sure. Perhaps >>>> there've been some cosmetic changes but I'm not aware of them. >>>> >>>> We've agreed to deprecate the HTTP binding as all the focus now is on >>>> enhancing the JAX-RS runtime. >>>> >>>> > The problem is that we need to keep the same XML messages format for >>>> >>>> backward compatibility. >>>> >>>> Can you please post a sample class annotated with HTTPBinding >>>> annotations and XML message which is expected by current clients ? >>>> >>>> Thanks, Sergey >>>> >>>> >>>> -----Original Message----- >>>> From: Gabriel Guardincerri [mailto:[email protected]] >>>> Sent: 12 June 2009 20:08 >>>> To: [email protected] >>>> Subject: How to migrate REST HTTP-binding to JAX-RS and keep the xml >>>> messages format? >>>> >>>> >>>> Hi, >>>> >>>> We have a lot of WS that were implemented using HTTP-binding of CXF >>>> 2.0.11, >>>> but when we tried to migrate CXF to 2.2.2 we found out that HTTP-binding >>>> do >>>> not pass params correctly. So we were trying to migrate those services >>>> to >>>> JAX-RS. The problem is that we need to keep the same XML messages format >>>> for >>>> backward compatibility. We tried with the three data binding providers >>>> that >>>> are in the jaxrs package XMLBeansElementProvider, JAXBElementProvider >>>> and >>>> AegisElementProvider, but none of them have the same XML format for >>>> messages >>>> that HTTP-binding has. >>>> >>>> Is there a way to do so? I mean, to implement services with JAX-RS and >>>> use >>>> the same XML data binding that has HTTP-binding? Or a way to build the >>>> same >>>> XML messages? >>>> >>>> Of course, if there is a way to make HTTP-binding work in version 2.2.2 >>>> or >>>> 2.1.5, it will be the best solution. >>>> >>>> Thanks, >>>> >>>> Gabriel >>> >>> -- >>> Daniel Kulp >>> [email protected] >>> http://www.dankulp.com/blog >> >
