You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Koen Serneels (JIRA)" <ji...@apache.org> on 2017/10/24 09:50:00 UTC

[jira] [Created] (CXF-7538) SOAP header silently removed in case of missing configuration parameters

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)