You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "abdelgadiri (JIRA)" <ji...@apache.org> on 2013/08/16 16:12:48 UTC

[jira] [Reopened] (CXF-4986) jax-rs2 request filter is unable to modify request header by adding a new header

     [ https://issues.apache.org/jira/browse/CXF-4986?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

abdelgadiri reopened CXF-4986:
------------------------------

    Reproduced In: 2.7.6

attached is the code to reproduce the issue. I would deploy the war file to my tomcat then run the test cases in the attached source project. One of the test cases (smallpayload) is always succeeding while the other testcase (largepayload) is always failing
                
> jax-rs2 request filter is unable to modify request header by adding a new header 
> ---------------------------------------------------------------------------------
>
>                 Key: CXF-4986
>                 URL: https://issues.apache.org/jira/browse/CXF-4986
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.7.2
>         Environment: cxf on tomcat
>            Reporter: abdelgadiri
>            Assignee: Sergey Beryozkin
>             Fix For: 2.7.5, 3.0.0
>
>         Attachments: bug4986-1.0.war, bug4986.zip
>
>
> I have a filter implementation as follows
> @Provider
> public class AuthSessionFilter implements ContainerRequestFilter {
>     public AuthSessionFilter() {
>     }
>     @Override
>     public void filter(ContainerRequestContext requestContext) throws IOException {      
>         //another @Prematching filter is setting this session id so it is definitely not null
>         Object sessionId = requestContext.getProperty("sessionId");
>         if (sessionId == null || GeneralUtils.isNullOrBlank(sessionId + "")) {
>             requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED)
>                     .entity("missing sessionId").build());
>         }
>        //this line gets invoked without problems, however, the added header is not available from the resource class
>         requestContext.getHeaders().putSingle("sessionId", sessionId+"");
>     }
> }
> The line requestContext.getHeaders().putSingle("sessionId", sessionId+""); is not making the added sessionId header available when trying to obtain it from my resource. getHeaders() is supposed to return a mutable map in accordance with the spec, but its implementation 'ContainerRequestContextImpl' is returning a readonly map instead. it returning:
>   return new MetadataMap<String, String>(
>             (Map<String, List<String>>)m.get(Message.PROTOCOL_HEADERS), false, true, true);
> where it is passing 'true' for the readonly parameter.
> in my resource, I am trying to obtain the header using
> public Response doSomething(UriInfo uriInfo, HttpServletRequest request) {
>         //this is always null even though it shouldn't be null
>         String sessionId = request.getHeader("sessionId");
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira