Hi, OK, thx Sergey, it's more clearer now. And Imissed the .entity method yesterday.
Thank you for your support :) Regards, -- Brice Le mercredi 14 décembre 2011 à 18:22, Sergey Beryozkin a écrit : > On 14/12/11 16:51, Brice wrote: > > Hi > > > > > > Thanx for your answers :) > > > > I got some more question on the ResponseHandler. > > > > -- > > Brice > > > > > > Le mercredi 14 décembre 2011 à 12:41, Sergey Beryozkin a écrit : > > > > > Hi > > > On 14/12/11 09:49, Brice Dutheil wrote: > > > > Hi, > > > > > > > > I would like some advice or help in designing a new REST service. > > > > > > > > I'm using CXF to serve REST webservices. I already have a custom > > > > interceptors, however I'm not sure how to deal with the following. > > > > > > > > > > > > Is it possible to 'map' HeaderParams (or FormParam, QueryParam, > > > > PathParam) > > > > to custom Java types, instead of a simple string. > > > > > > > > > > > > > > > > Have a look here please: > > > http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-DealingwithParameters > > > > > > JAX-RS offers one option: if a type has one of the factory methods then > > > it will be used; otherwise the CXF ParameterHandler extension will help > > > > > > > Ok, thx, I missed that page when focusing on interceptors. > > > > > > > And eventually answer > > > > something else if the value of the param is not valid. > > > > > > > > For example the HTTP Header "Accept-Language" can have several string > > > > values, I would like to map those values to a List<Locale> in order to > > > > write methods like the one below : > > > > > > > > @GET > > > > @Path("/check/stuff/{id}") > > > > public CustomAnswer > > > > checkStuffAndAnswerInAcceptedLanguage(@PathParam("id") > > > > int id, @HeaderParam(HttpHeaders.ACCEPT_LANGUAGE) List<Locale> locales) > > > > { > > > > // business stuff > > > > } > > > > > > > > > > > > > > > > I'd recommend injecting HttpHeaders and use its getAcceptableLanguages > > > method which will a properly sorted List<Locale>; the above will also > > > work but it's not guaranteed to be sorted AFAIK and a Locale constructor > > > accepting a single String will be used which will miss on local values > > > such as 'us' in 'en-us', etc > > > > > > > Yes indeed, before your reply I was planning to use LocaleUtils from > > commons-lang. The locale was also just an example we will have more custom > > headers maybe. Anyway the page seems to explain this case. > > > > > > > > > > > Also if the locales are incorrect then answer with a custom response (in > > > > JSON or XML), I'm not sure if I should use the JAXRS response builder or > > > > rely on a provider (we are using GSon in a provider). > > > > > > > > > > > > > Using custom Response, or out filter (ResponseHandler), ExceptionMapper > > > and even custom MBW will work > > > > > > > I'm not sure to follow you there, the JAX-RS Response class cannot receive > > a body. > > Does the ResponseHandler message parameter is the response payload/body ? > > On which we can feed an JSon content? > > > > > This time it is my turn to be confused :-) > Basically what I was saying you can use one of the options I listed in > order to produce a custom response: do return > Response.status(status).entity(customEntity).build() or get the filter > overwrite it or throw an exception and get ExceptionMapper producing the > response > > > Does the ExceptionMapper works if I throw something before the INVOKE phase > > ? > > No, ExceptionMappers are checked only if exceptions got originated from > the JAX-RS-managed (JAX-RS filters, invoker, the runtime itself, > application code) but you can manage the exceptions at the level of CXF > interceptors by registering a custom fault out interceptor > > Cheers, Sergey > > > > > > > > > HTH, Sergey > > > > > > > > > > > Thanx in advance for your input. > > > > > > > > > -- > > > Sergey Beryozkin > > > > > > Talend Community Coders > > > http://coders.talend.com/ > > > > > > Blog: http://sberyozkin.blogspot.com
