I tried to add SOAP header to my request via BindingProvider.getRequestContext().put(Header.HEADER_LIST, headers)
but the SOAP Header is missing. My code is like the following:
Standard WebService class generated by CXF:
@WebService(targetNamespace = "...", name = "...")
@XmlSeeAlso({...ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface MyService {
...
@WebMethod(operationName = "...")
public Future<?> sendAsync(
@WebParam(partName = "parameters", name = "...", targetNamespace = "...")
MyRequestMessageType parameters,
@WebParam(name = "asyncHandler", targetNamespace = "")
AsyncHandler<MyResponseMessageType> asyncHandler
);
}
Standard WebServiceClient class generated by CXF
@WebServiceClient(name = "...", wsdlLocation = "...", targetNamespace = "...")
public class MyService_Service extends Service {
...
@WebEndpoint(name = "...")
public MyService getVendorManagementService() {
return super.getPort(MY_SERVICE, MyService.class);
}
}
Class which sends my request:
@Inject
private MyService_Service myService;
public void send() {
BindingProvider port = (BindingProvider) myService.getWebEndpointPort();
port.getRequestContext().put("thread.local.request.context", "true");
List<Header> headers = getHeaders(port.getRequestContext());
Header messageIDHeader = new Header(new QName("http://www.w3.org/2005/08/addressing", "MessageID", "wsa"), "some_id", new JAXBDataBinding(String.class));
headers.add(messageIDHeader);
port.getRequestContext().put(Header.HEADER_LIST, headers);
MyRequestMessageType message = messageCreator.createMyRequestMessage();
MyAsyncHandler asyncHandler = new MyAsyncHandler();
((MyService) port).sendAsync(message, asyncHandler);
}
private static List<Header> getHeaders(Map<String, Object> messageContext) {
if (messageContext == null) {
return null;
}
List<Header> headers = CastUtils.cast((List<?>) messageContext.get(Header.HEADER_LIST));
if (headers == null){
return new ArrayList<Header>();
}
return headers;
}
It generates correct request but SOAP Header is missing. The request contains only SOAP Body:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
... the message is OK
</soap:Body>
</soap:Envelope>
I have no idea what is wrong. Thanks for any advice.