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

ASF GitHub Bot commented on CXF-7842:
-------------------------------------

andymc12 commented on issue #445: CXF-7842: ContainerRequestFilter.getHeaders() 
Does Not Honor Header Split Setting
URL: https://github.com/apache/cxf/pull/445#issuecomment-427131690
 
 
   @jwcarman, yes, it does fail the TCK.  The failing test is called 
`getHeadersIsMutableTest` - and so the problem is that when a 
`ContainerRequestFilter` attempts to modify the headers (`MultivaluedMap`), it 
gets an exception similar to this (this exception is from an OpenLiberty test 
case I wrote, not the TCK - but I believe it is the same issue):
   
   ```
   java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1457)
    at org.apache.cxf.jaxrs.impl.MetadataMap.put(MetadataMap.java:185)
    at org.apache.cxf.jaxrs.impl.MetadataMap.putSingle(MetadataMap.java:130)
    at 
jaxrs21.fat.mutableHeaders.ContainerRequestFilter1.filter(ContainerRequestFilter1.java:37)
    at 
org.apache.cxf.jaxrs.utils.JAXRSUtils.runContainerRequestFilters(JAXRSUtils.java:1709)
    at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:267)
    at 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:89)
    at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:124)
    at 
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:274)
    at 
com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.invoke(AbstractJaxRsWebEndpoint.java:134)
    at 
com.ibm.websphere.jaxrs.server.IBMRestServlet.handleRequest(IBMRestServlet.java:146)
    at 
com.ibm.websphere.jaxrs.server.IBMRestServlet.doGet(IBMRestServlet.java:112)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:686)
    at 
com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:96)
    at 
com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1255)
    at 
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:743)
    at 
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440)
    at 
com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1221)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4954)
    at 
com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:314)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:996)
    at 
com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:279)
    at 
com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1011)
    at 
com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:414)
    at 
com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:373)
    at 
com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:532)
    at 
com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:466)
    at 
com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:331)
    at 
com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:302)
    at 
com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:165)
    at 
com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:74)
    at 
com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:501)
    at 
com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:571)
    at 
com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:926)
    at 
com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1015)
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
   ```
   
   So, I think the fix will need to return a modifiable map that also honors 
the split headers setting (if enabled).

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> ContainerRequestFilter.getHeaders() Does Not Honor Header Split Setting
> -----------------------------------------------------------------------
>
>                 Key: CXF-7842
>                 URL: https://issues.apache.org/jira/browse/CXF-7842
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 3.2.6, 3.3.0
>            Reporter: James Carman
>            Assignee: Andy McCright
>            Priority: Major
>
> Even after setting the "org.apache.cxf.http.header.split" setting on the 
> JAXRSServerFactoryBean, the headers still come back concatenated together.  
> They are properly separated in HttpHeadersImpl using the same setting, 
> however.  These need to be consistent.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to