我正在使用 Spring-WS 调用 SOAP Web 服务。有问题的 Web 服务要求我在 SOAP 标头中传递一些信息,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<CustomHeaderElement>
<clientID>xyz</clientID>
<wsdlVersion>1.0</wsdlVersion>
<serviceType>ExampleService_v1</serviceType>
</CustomHeaderElement>
</soapenv:Header>
<soapenv:Body>
...
</soapenv:Body>
</soapenv:Envelope>
我已经想出了如何拥有顶级 CustomHeaderElement,但我在 Spring-WS API 中看不到任何允许我添加子元素的东西。这是我到目前为止所拥有的:
WebServiceTemplate template = ...;
template.marshalSendAndReceive(request, new WebServiceMessageCallback(){
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException{
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader soapHeader = soapMessage.getSoapHeader();
QName qName = new QName("CustomHeaderElement");
SOAPHeaderElement headerElement = soapHeader.addHeaderElement(qName);
//would like to do something like headerElement.addChild(clientIdNode);
}
});
问题是 headerElement 似乎没有公开任何实际添加孩子的方法。我知道我可以添加一个属性,但这不是此服务调用所需要的。有谁知道我如何将必要的子元素添加到我的自定义标题中?