Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
2.2.3
-
None
Description
In my WSDL a security SOAP header is defined as a separate message ("implicit header definition"), which is handled by a WSS4JInInterceptor. But when the service implementation is invoked, one of the other parameters has been removed and thus causes a NullPointerException.
Through debugging I found that in this case the WrapperClassInInterceptor tries to remove the additional header value from the parameters of the MessageContentsList by identifying the corresponding MessagePartInfo. But since the indexing in messageInfo and wrappedMessageInfo is naturally different, the part index from wrappedMessageInfo (line 140) cannot be used for removing a value from the newParams list (line 155). Thus a "regular" parameter value gets removed.
A work around would probably be to use an explicit security parameter with @WebParam(header = true), as generated from -exsh true flag to wsdl2java, but I don't like to have this extra parameter in my service interface (as with @WebParam(header = true) from -exsh true flag to wsdl2java), since security information is rather an aspect than business parameter.
Here an excerpt from my WSDL with the implicit header definition:
<wsdl:binding name="TravelExpensesServiceSoapBinding" type="tr:TravelExpensesWebService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="submitTravel">
<soap:operation soapAction="http://travel.sdm.de/travelExpenses/submitTravel"/>
<wsdl:input name="submitTravelRequest">
<soap:header message="tr:securityHeader" part="security" wsdl:required="true" use="literal"/>
<soap:body parts="submitTravel" use="literal"/>
</wsdl:input>
<wsdl:output name="submitTravelResponse">
<soap:body parts="submitTravelResponse" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>