Untergeordnete Elemente hinzufügen zu benutzerdefinierten SOAP-header in Spring-WS
Ich bin Aufruf eines SOAP-webservice mit Spring-WS. Der webservice in Frage, verlangt von mir einige Informationen im SOAP-header, so wie hier gezeigt:
<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>
Ich habe herausgefunden, wie man hatte die top-level-CustomHeaderElement, aber ich sehe nichts in die Spring-WS-API, die mir erlaubt, ein child-element hinzufügen. Hier ist was ich habe, so weit:
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);
}
});
Das problem ist headerElement scheint nicht auszusetzen, bedeutet tatsächlich das hinzufügen eines Kindes. Ich weiß, ich kann ein Attribut hinzuzufügen, aber das ist nicht das, was ich brauche für diesen service nennen. Weiß jemand wie ich das hinzufügen könnte, die notwendige Kind-Elemente zu meine custom-header?
InformationsquelleAutor der Frage Mike Deck | 2010-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stieß ich auf das gleiche Problem, hier meine Lösung, aber es funktioniert nur einfache Elemente, die nicht für komplexe:
es erzeugt Folgendes XML:
BTW
javax.xml.soap.SOAPMessage
kann auch funktionieren, siehe hier: http://docs.oracle.com/javaee/5/tutorial/doc/bnbhr.html#bnbiaInformationsquelleAutor der Antwort hit3k
Produzierte Ausgabe
InformationsquelleAutor der Antwort Manjago
Ich bin nicht zufrieden mit dieser Lösung, aber es stellt sich heraus, dass man tatsächlich wandeln Sie die Nachricht an eine SOAPMessage, die gibt Ihnen vollen Zugriff auf alle SAAJ-apis. Von dort aus können Sie bauen, was auch immer Elemente, die Sie wollen innerhalb der header.
InformationsquelleAutor der Antwort Mike Deck
Ich hatte das gleiche Problem und es behoben mit dem folgenden snippet:
Den
createCustomerHeader()
Methode erstellt eine JAXB-bean, die generiert wurde, aus der XSD-Datei.InformationsquelleAutor der Antwort Ondrej Burkert