Cannot add headers to request from Dispatch client in async mode -- ThreadLocal
issue
-------------------------------------------------------------------------------------
Key: CXF-2101
URL: https://issues.apache.org/jira/browse/CXF-2101
Project: CXF
Issue Type: Bug
Components: JAX-WS Runtime
Affects Versions: 2.1.4
Environment: JDK 1.6.0_10
Reporter: Andrew Clegg
org.apache.cxf.jaxws.DispatchImpl extends
org.apache.cxf.jaxws.BindingProviderImpl, which has a requestContext field:
protected ThreadLocal <Map<String, Object>> requestContext =
new ThreadLocal<Map<String, Object>>();
Because the request context is in a ThreadLocal, changes made to it are not
visible when you invoke the service via DispatchImpl's invokeAsync method.
For example:
dispatch.getRequestContext().put(
BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE );
dispatch.getRequestContext().put(
BindingProvider.SOAPACTION_URI_PROPERTY, "uri:myAction" );
// If you call it this way, no SOAPAction header, verified by Wireshark:
Response<StreamSource> response = dispatch.invokeAsync( request );
// But if you call it this way, you get the header
StreamSource result = dispatch.invoke( request );
I can package up a test case if anyone thinks it would help fix this.
Personally I know very little about CXF's internals, or the JAX-WS specs, but I
can do whatever necessary to help.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.