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