oneway camel scenario is accessing the user principal too late, resulting in IllegalStateException --------------------------------------------------------------------------------------------------
Key: CXF-4060 URL: https://issues.apache.org/jira/browse/CXF-4060 Project: CXF Issue Type: Bug Components: Transports Affects Versions: 2.5.2, 2.4.6 Environment: gemini.web.tomcat 2.0.1 Reporter: Aki Yoshida Assignee: Aki Yoshida Camel-CXF looks up the user principal in Camel's DefaultCxfBinding over CXF's SecurityContext object stored in the message. In the current implementation, the principal in this object is dynamically retrieved from the associated servlet request object. Under some specific circumstances such as using tomcat with the JVM's security manager enabled, the request object is recycled after the calling thread returns. This can lead to the following exception for oneway call: java.lang.IllegalStateException: The request object has been recycled and is no longer associated with this facade at org.apache.catalina.connector.RequestFacade.getUserPrincipal(RequestFacade.java:831) ~[na:na] at org.apache.cxf.transport.http.AbstractHTTPDestination$2.getUserPrincipal(AbstractHTTPDestination.java:304) ~[bundlefile:2.5.1] at org.apache.camel.component.cxf.DefaultCxfBinding.populateExchangeFromCxfRequest(DefaultCxfBinding.java:235) ~[bundlefile:2.8.3] at org.apache.camel.component.cxf.CxfConsumer$1.perpareCamelExchange(CxfConsumer.java:159) ~[bundlefile:2.8.3] at org.apache.camel.component.cxf.CxfConsumer$1.syncInvoke(CxfConsumer.java:117) ~[bundlefile:2.8.3] at org.apache.camel.component.cxf.CxfConsumer$1.invoke(CxfConsumer.java:71) ~[bundlefile:2.8.3] at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) ~[na:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) ~[na:1.6.0_24] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) ~[na:1.6.0_24] at java.util.concurrent.FutureTask.run(FutureTask.java:138) ~[na:1.6.0_24] at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) ~[bundlefile:2.5.1] at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106) ~[na:na] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) ~[bundlefile:2.5.1] at org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:232) ~[bundlefile:2.5.1] at org.apache.cxf.interceptor.OneWayProcessorInterceptor$1.run(OneWayProcessorInterceptor.java:130) ~[na:na] at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:371) ~[bundlefile:2.5.1] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) ~[na:1.6.0_24] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) ~[na:1.6.0_24] at java.lang.Thread.run(Thread.java:662) ~[na:1.6.0_24] -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira