[ 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)