Fondamentalmente, è necessario utilizzare un WebServiceMessageCallback
nel client per modificare il messaggio dopo la sua creazione ma prima che venga inviato. Per resto del codice è stato descritto abbastanza accuratamente dal @skaffman così tutta la roba potrebbe essere simile a questo:
public void marshalWithSoapActionHeader(MyObject o) {
webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<credentials xmlns=\"http://example.com/auth\">\n +
<username>"+username+"</username>\n +
<password>"+password"+</password>\n +
</credentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
// exception handling
}
}
});
}
Personalmente, trovo che la primavera-WS succhia difficile per un bisogno così fondamentale, che dovrebbe risolvere SWS-479.
fonte
2010-02-16 19:10:39
Primavera-WS è praticamente un one-man operazione, e Arjen non è così suggestionabile come il resto di loro:) – skaffman
Grazie Pascal, funziona perfettamente. Ho finito per utilizzare javax.xml.bind.util.JAXBSource invece di StringSource in questo modo: JAXBSource headerSource = new JAXBSource (jaxbContext, credenziali); –
@skaffman Effettivamente :) –