Hi,

Recently, I had time to have a closer look at this. I first analysed the 
behaviour of the old implementation using 
(Http)ServletRequest.getParameter(String). 
I observed that it is possible to mix both parameters provided in the URL and 
in the body of the request, whereas the parameters in the URL are preferred to 
the ones in the body. 

For example, assuming a service method with 3 parameters param1, param2 and 
param3:
URL: http://server1/service/method?param1=urlValue1&param2=urlValue2
Body: param2=bodyValue2&param3=bodyValue3
Then (Http)ServletRequest.getParameter(String) will return: param1=urlValue1, 
param2=urlValue2 and param3=bodyValue3

So I tried to create a bean param class for a GET method containing @QueryParam 
annotations on the setters. In a second step, I created a subclass of the bean 
param class to use it for a POST method with application/x-www-form-urlencoded 
by overriding the setters and annotating them with @FormParam using the same 
parameter names. Now this is working fine as long as parameters are not mixed 
like I described it above. I think this is logical because I overwrote the 
setters and replaced the annotation. So I tried to create new setter methods 
with a suffix, annotated those with @FormParam and make them call the setter of 
the superclass. Unfortunately, this doesn't work.

Does someone have an idea how I can achieve the behaviour of the old 
implementation?


Viele Grüße,
 
Julien 

Avitech GmbH
Engineering AxL
Tel.: +49 (0)7541/282-177
Fax: +49 (0)7541/282-199
e-mail: [email protected]
________________________________________________
Avitech GmbH
Principal Office: Bahnhofplatz 1 | 88045 Friedrichshafen | Germany
Court Registration: Amtsgericht Ulm | HRB 728293
Geschäftsführer/Managing Director: Antonio Maria Gonzalez Gorostiza
http://avitech.aero

This message may contain confidential information and is intended only for the 
individual named. If you are not the named addressee you should not 
disseminate, distribute or copy this e-mail. Please notify the sender 
immediately by e-mail if you have received this e-mail by mistake and delete 
this e-mail from your system.

-----Ursprüngliche Nachricht-----
Von: Julien Charon [mailto:[email protected]] 
Gesendet: Donnerstag, 10. Dezember 2015 15:51
An: [email protected]
Betreff: AW: CXF 3.0.7 JAXRS POST application/x-www-form-urlencoded

Thank you. So I will wait for 3.0.8.

However, I noticed another behaviour related to using HttpServletRequest but 
with content type text/xml. If javax.servlet.ServletRequest.getInputStream() is 
called, an InputStream is returned that contains no data, i.e. I can't access 
the body of the POST request. Anything else I can do to avoid that than getting 
the body as method parameter?


Best regards,
 
Julien 

Avitech GmbH
Engineering AxL
Tel.: +49 (0)7541/282-177
Fax: +49 (0)7541/282-199
e-mail: [email protected]
________________________________________________
Avitech GmbH
Principal Office: Bahnhofplatz 1 | 88045 Friedrichshafen | Germany Court 
Registration: Amtsgericht Ulm | HRB 728293 Geschäftsführer/Managing Director: 
Antonio Maria Gonzalez Gorostiza http://avitech.aero

This message may contain confidential information and is intended only for the 
individual named. If you are not the named addressee you should not 
disseminate, distribute or copy this e-mail. Please notify the sender 
immediately by e-mail if you have received this e-mail by mistake and delete 
this e-mail from your system.

-----Ursprüngliche Nachricht-----
Von: Sergey Beryozkin [mailto:[email protected]]
Gesendet: Sonntag, 6. Dezember 2015 18:47
An: [email protected]
Betreff: Re: CXF 3.0.7 JAXRS POST application/x-www-form-urlencoded

FYI:

https://issues.apache.org/jira/browse/CXF-6679

Sergey
On 04/12/15 11:59, Sergey Beryozkin wrote:
> Hi
>
> Thanks for experimenting with CXF,
>
> https://issues.apache.org/jira/browse/CXF-6679
>
> is open and I'm honestly not sure why it is not working because CXF 
> itself does not consume that data, so if it works directly with the 
> servlet then it should work inside the JAX-RS code.
> Unless CXF does some internal caching before the stream even consumed 
> by the application, hmm, need to check that...
>
> That said, I;d recommend avoiding using HttpServletRequest and simply 
> have MultivaluedMap in the method signature or @FormParams if a number 
> of parameters is not open ended.
>
> I'll look at CXF-6679 asap
>
> Sergey
>
>
> On 04/12/15 08:35, Julien Charon wrote:
>>    Hi everybody,
>>
>>
>> A couple of days ago I started refactoring one of our applications to 
>> use CXF / JAX-RS. Until then the entry point of the application was 
>> an implementation of javax.servlet.http.HttpServlet that was deployed 
>> to tomcat extracting all information needed using the doPost and 
>> doGet methods and the HttpServletRequest / HttpServletResponse 
>> parameters directly.
>> Now I refactored that usind a CXFNonSpringServlet and moving the 
>> implementation to a service class with 2 methods annotated with @POST 
>> / @GET and, again, 2 parameters HttpServletRequest / 
>> HttpServletResponse with the help of the @Context annotation.
>> Everything went smooth, so I started doing some regression tests and 
>> noticed a different behaviour of the new implementation compared to 
>> the new one: I send a POST request with Content-Type 
>> application/x-www-form-urlencoded and defining some parameters in the 
>> body of the request instead of passing them directly as parameters in 
>> the URL. The "old" implementation will get all parameters defined in 
>> the body by calling (Http)ServletRequest.getParameter(String) but the 
>> new one will not. Actually, it looks like no parameters were defined 
>> at all.
>> I really would like to void to read the body and parse it to extract 
>> the parameters defined in there. Is there a logic explanation for 
>> that behaviour? Do I need to define an Interceptor or something similar?
>> Any help/clarification would be appreciated.
>>
>>
>> Best regards,
>> Julien
>>
>> Avitech GmbH
>> Engineering AxL
>> Tel.: +49 (0)7541/282-177
>> Fax: +49 (0)7541/282-199
>> e-mail: [email protected]<mailto:[email protected]>
>> ________________________________________________
>> Avitech GmbH
>> Principal Office: Bahnhofplatz 1 | 88045 Friedrichshafen | Germany 
>> Court Registration: Amtsgericht Ulm | HRB 728293 
>> Geschäftsführer/Managing Director: Antonio Maria Gonzalez Gorostiza 
>> http://avitech.aero<http://avitech.aero/>
>>
>> This message may contain confidential information and is intended 
>> only for the individual named. If you are not the named addressee you 
>> should not disseminate, distribute or copy this e-mail. Please notify 
>> the sender immediately by e-mail if you have received this e-mail by 
>> mistake and delete this e-mail from your system.
>>
>>
>
>


--
Sergey Beryozkin

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

Reply via email to