Я вызываю веб-сервис SOAP с помощью Spring-WS. Вебсервис в вопросе требует от меня, чтобы передать какую-то информацию в заголовке SOAP, как показано здесь:Добавить дочерние элементы в пользовательский заголовок SOAP в Spring-WS
<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, кажется, не возникает никаких средств на самом деле добавить ребенка. Я знаю, что могу добавить атрибут, но это не то, что мне нужно для этого вызова службы. Кто-нибудь знает, как я могу добавить необходимые дочерние элементы в свой собственный заголовок?
Вы имеете в виду что-то похожее на это сообщение: http://stackoverflow.com/questions/4046075/how-to-add-soap-headers-to-spring-jax-ws-client, где Transformer используется после литья сообщение SOAPMessage? Я согласен, что это не очень приятно и элегантно. Интересно, почему. – chris
-1 Не совсем ответ. Постскриптум ссылка, предоставленная @chris, имеет хорошие решения. – kaskelotti
Ваш ответ, даже обозначенный как правильный, не помог нам вообще. – marionmaiden