Koen Serneels created CXF-7538:
----------------------------------
Summary: SOAP header silently removed in case of missing
configuration parameters
Key: CXF-7538
URL: https://issues.apache.org/jira/browse/CXF-7538
Project: CXF
Issue Type: Bug
Components: Core
Affects Versions: 3.1.9
Reporter: Koen Serneels
Hi. We are using CXF as our JAXWS impl i.c.w. Spring. The configuration of a ws
client looks like this:
{code:xml}
<jaxws:client id="webservices.xyz"
serviceClass="someclass"
address="#{@'someurl'}"
wsdlLocation="classpath:/somewsdl.wsdl">
<jaxws:dataBinding>
<bean class="org.apache.cxf.jaxb.JAXBDataBinding"/>
</jaxws:dataBinding>
<jaxws:properties>
<entry key="schema-validation-enabled" value="true"/>
<entry key="thread.local.request.context" value="true"/>
</jaxws:properties>
<jaxws:inInterceptors>
<ref bean="requestResponseInterceptorIn"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="requestResponseInterceptorOut"/>
</jaxws:outInterceptors>
</jaxws:client>
{code}
We've learned that the wsdlLocation attribute is rather vital for full schema
validation. Makes sense, as it needs access to the actual schema's for this.
However, we also saw that when setting the wsdlLocation attribute, the stack
suddenly drops soap headers. The header in question is defined in the WSDL like
this (all pretty standard):
{code:xml}
<operation name="someOperation">
<SOAP11:operation/>
<input>
<SOAP11:body use="literal"/>
<SOAP11:header message="wsdltns:requestHeader" part="somePart"
use="literal"/>
</input>
<output>
<SOAP11:body use="literal"/>
</output>
<fault name="someException">
<SOAP11:fault name="someException" use="literal"/>
</fault>
</operation>
{code}
Even though the header is passed along in the method call on the client stub,
the header is no longer present in the SOAP message when the wsdlLocation
attribute is set. There is no error, no nothing. Then we learned that if we add
following attributes to the the jaxws:client element, the header is sent along
just fine;
{code:xml}
serviceName="wsdltns:someService"
endpointName="wsdltns:someEndpoint"
{code}
So to summarize: the serviceName and endpointName seem optional as the client
stub just works without them, even when the wsdlLocation is specified.
However, in the latter case, the SOAP headers seem to be silently dropped.
Because of this we now have all kinds of unit tests to verify that the client
stubs are still 'configured correctly', to avoid the silent loss of SOAP
headers if someone would accidentally remove any of these seemingly optional
attributes. Dropping headers silently without any error seems a bug to me.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)