5

I am trying to port this CORS filter to JAX-RS 2.

However, I do not see how to get the Response object (as in the old code) from the ContainerResponseContext I get passed in the overridden method of ContainerResponseFilter.

If there is a more elegant way to do CORS with JAX-RS 2, that would be preferrable of course. Thanks in advance.

Janus Troelsen
  • 20,267
  • 14
  • 135
  • 196

1 Answers1

10

Thre response is directly accessible as the ContainerResponseContext:

@Provider
public class ResponseCorsFilter implements ContainerResponseFilter{

    @Override
    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {
           responseContext.getHeaders()
                .putSingle("Access-Control-Allow-Origin","*");
           responseContext.getHeaders()
                 .putSingle("Access-Control-Allow-Methods",
                     "GET, POST, PUT, DELETE");
           List<String> reqHead=requestContext.getHeaders()
                     .get("Access-Control-Request-Headers");
           if(null != reqHead){
                responseContext.getHeaders()
                   .put("Access-Control-Allow-Headers", 
                        new ArrayList<Object>(reqHead));
           }
    }

}
Carlo Pellegrini
  • 5,656
  • 40
  • 45
  • 1
    But using this how can i get My response BODY ? – HybrisHelp Apr 24 '14 at 07:20
  • There is the `ContainerResponseContext.setEntity` method which allows to substitute the entire entity. – Carlo Pellegrini Apr 24 '14 at 09:10
  • Thanks... can i do reverse operation on `ContainerRequestContext` ? I mean i want to get POJO from `ContainerRequestContext` in filter . from `ContainerRequestContext`, we can get `EntityStream` from that,but i want `Entity` as we get in ``ContainerResponseContext`` – HybrisHelp Apr 24 '14 at 10:29
  • There is `ContainerResponseContext.getEntity()`, according to the [api](http://docs.oracle.com/javaee/7/api/javax/ws/rs/container/ContainerResponseContext.html) it does what you need. – Carlo Pellegrini Apr 24 '14 at 10:40
  • yes, `ContainerResponseContext.getEntity()` but same method or behavior i need in `ContainerRequestContext` Is there any way to get `Entity object` from `ContainerRequestContext` – HybrisHelp Apr 24 '14 at 10:43
  • 1
    There is no way to obtain the object using this type of filter, because it is binded to the outer level of the request/response cycle. What you need may be obtained implementing a [ReaderInterceptor](http://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/ReaderInterceptor.html), and using the method `proceed()` of the [ReaderInterceptorContext](http://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/ReaderInterceptorContext.html), passed to `aroundReadFrom` – Carlo Pellegrini Apr 24 '14 at 11:37
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/51361/discussion-between-carlo-pellegrini-and-ankit337) – Carlo Pellegrini Apr 24 '14 at 15:22