[
https://issues.apache.org/jira/browse/CAMEL-8253?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Willem Jiang resolved CAMEL-8253.
---------------------------------
Resolution: Fixed
Fix Version/s: 2.15.0
2.14.2
2.13.4
Applied the patch into camel master,camel-2.14.x and camel-2.13.x branches.
> CXFRS Throws IndexOutOfBoundsException for Empty Headers
> --------------------------------------------------------
>
> Key: CAMEL-8253
> URL: https://issues.apache.org/jira/browse/CAMEL-8253
> Project: Camel
> Issue Type: Bug
> Components: camel-cxf
> Affects Versions: 2.14.1
> Reporter: Vincent Furlanetto
> Assignee: Willem Jiang
> Fix For: 2.13.4, 2.14.2, 2.15.0
>
>
> Getting an IndexOutOfBoundsException when empty HTTP request headers are
> passed to a camelrs web method calls (See stack trace below).
> The culprit appears to be related to the check on line 284 of class
> DefaultCxfRsBinding.java.
> More specifically here:
> ((List)entry.getValue()).get(0)
> Internally the ArrayList class will perform a range check and if the index is
> greater than or equal to the size of the list the IndexOutOfBoundsException
> is thrown.
> So we probably want to add an additional check before this one, something
> like:
> ((List)entry.getValue()).size() == 0 before the check above, since we
> probably want to account for empty lists.
> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
> at java.util.ArrayList.rangeCheck(ArrayList.java:604) ~[na:1.7.0_25]
> at java.util.ArrayList.get(ArrayList.java:382) ~[na:1.7.0_25]
> at
> org.apache.camel.component.cxf.jaxrs.DefaultCxfRsBinding.copyProtocolHeader(DefaultCxfRsBinding.java:284)
> ~[camel-cxf-2.14.1.jar:2.14.1]
> at
> org.apache.camel.component.cxf.jaxrs.DefaultCxfRsBinding.populateExchangeFromCxfRsRequest(DefaultCxfRsBinding.java:116)
> ~[camel-cxf-2.14.1.jar:2.14.1]
> at
> org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.syncInvoke(CxfRsInvoker.java:123)
> ~[camel-cxf-2.14.1.jar:2.14.1]
> at
> org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.performInvocation(CxfRsInvoker.java:59)
> ~[camel-cxf-2.14.1.jar:2.14.1]
> at
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:97)
> ~[cxf-core-3.0.2.jar:3.0.2]
> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:200)
> [cxf-rt-frontend-jaxrs-3.0.2.jar:3.0.2]
> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)
> [cxf-rt-frontend-jaxrs-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
> ~[cxf-core-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
> ~[cxf-core-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> ~[cxf-core-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> ~[cxf-core-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:290)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:214)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:575)
> ~[geronimo-servlet_3.0_spec-1.0.jar:1.0]
> at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
> ~[cxf-rt-transports-http-3.0.2.jar:3.0.2]
> at
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:696)
> ~[jetty-servlet-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1568)
> ~[jetty-servlet-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:139)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> ~[spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
> ~[spring-security-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]
> at
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
> ~[spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
> at
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
> ~[spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1548)
> ~[jetty-servlet-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:524)
> ~[jetty-servlet-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568)
> ~[jetty-security-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1110)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:453)
> ~[jetty-servlet-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1044)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at org.eclipse.jetty.server.Server.handle(Server.java:459)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:280)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229)
> ~[jetty-server-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
> ~[jetty-io-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
> ~[jetty-util-9.1.0.v20131115.jar:9.1.0.v20131115]
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
> ~[jetty-util-9.1.0.v20131115.jar:9.1.0.v20131115]
> at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)