cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sergey Beryozkin (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-5316) REST Overriding request URI doesn't change serviceBeans
Date Fri, 18 Oct 2013 11:51:46 GMT

    [ https://issues.apache.org/jira/browse/CXF-5316?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13799046#comment-13799046
] 

Sergey Beryozkin commented on CXF-5316:
---------------------------------------

Default CXF JSONProvider listens on application/json only by default, I've relaxed it to also
support application/*+json composite media types by default too, but it is possible to configure
it with a list of types, example, 

{code:xml}
<util:list id="jsonTypes">
    <value>application/json</value>
    <value>application/*+json</value>
 </util:list>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
      <property name="produceMediaTypes" ref="jsonTypes"/>
      <property name="consumeMediaTypes" ref="jsonTypes"/>
  </bean>
{code} 

I'm not sure how to get JacksonJsonProvider configured, please check their archives, if you
find out how - let us know please, I'll update the docs. If that is not possible then create
a simple custom provider implementing MessageBodyWriter (and MessageBodyReader if needed)
which will delegate directly  to an instance of JacksonJsonProvider, but your custom provider
will have Produces and Consumes annotations with application/json  & application/*+json:

{code:java}
@Produces({"application/json", "application/*+json" })
@Consumes({"application/json", "application/*+json" })
{code} 

Re the other problem: I'll reopen the issue and investigate

> REST Overriding request URI doesn't change serviceBeans
> -------------------------------------------------------
>
>                 Key: CXF-5316
>                 URL: https://issues.apache.org/jira/browse/CXF-5316
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.7.6
>            Reporter: DUCHEOL KIM
>            Assignee: Sergey Beryozkin
>
> Hi All.
> I am writing RESTful API code using CXF.
> For the versioning, we plan to implement based on Content-Type header.
> For this, I'm trying to two ways but both of them aren't work.
> 1. Use different Consumes annotation at same class.
>     I try to set different Content-Type at same class, but it always work with one method.
>     @POST
>     @Path("/")
>     @Produces("application/json")
>     @Consumes("application/json; application,v=2")
>     public Response createProjectV2(Person person) {
>     ....
>     }
> ...
>     @POST
>     @Path("/")
>     @Produces("application/json")
>     @Consumes("application/json")
>     public Response createProject(Person person) {
>     ....
>     }
> always "createProject" which has "application/json" on Consumes annotation.
> 2.  Update Request URI at interceptor to use different serviceBean for differnt version.
> public class CommonInInterceptorImpl  implements RequestHandler{
> 	public Response handleRequest(Message message , ClassResourceInfo resourceClass) {
> ...
> 				String requestUri = (String)message.get(Message.REQUEST_URI);
> 				String basePath = (String)message.get(Message.BASE_PATH);
> 				
> 				String targetPath = basePath+"ver-"+version+"/"+requestUri.substring(basePath.length());
> 				message.put(Message.CONTENT_TYPE, "application/json;application,v=2");
> 				message.put(Message.REQUEST_URI, targetPath);
> ...
> }
> ....
> Service Bean 1 
> @Path(PersonService.PERSON_SERVICE_URL)
> public class PersonService extends RESTApiHandler{
> ...
> }
> Service Bean 2  ( in different package ) 
> @Path("/ver-2/"+com.tfsm.palette.api.rest.PersonService.PERSON_SERVICE_URL)
> public class PersonService {
> ...
> }
> I update REQUEST_URI at interceptor to redirect request to other serviceBean, but request
is processed orginal desired serviceBean.
> ( I expect redirect request to 2nd service Bean , but it always processed at 1st service
Bean. )
> I don't know whether 1st approach is correct in JAX RS spec, but I expect 2nd have to
be work because it is mentioned at your documentation.
> http://cxf.apache.org/docs/jax-rs-filters.html#JAX-RSFilters-OverridingrequestURI%2Cqueryandheaders
> Could you let me know how we could redirect request to different serviceBean ? 



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Mime
View raw message