Mit CXF (eigentlich GroovyWS), wie erstelle ich einen SOAP-Header mit einem Kind-Knoten einen Textknoten mit?

StackOverflow https://stackoverflow.com/questions/3807922

Frage

Ich erstelle ein Groovy-Client für einen .net SOAP-Dienst, der einen SOAP-Header, dass wie folgt aussieht erfordert:

<soap:Header>
    <HeaderInfo xmlns="http://foo.bar.com/ns">
        <token>abc-unique-token</token>
    </HeaderInfo>
</soap:Header>

die FAQ für Header CXF Nachrichten Hinzufügen und es wird mir fast da, aber nicht ganz. Das Beispiel geben sie für die Option 4 sieht wie folgt aus:

    List<Header> headers = new ArrayList<Header>()
    Header header = new Header(new QName("http://foo.bar.com/ns", "HeaderInfo"), 
        "abc-unique-token", new JAXBDataBinding(String.class))
    headers.add(header)

    proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)

Sie diesen Code verwenden, kann ich es bekommen, dies zu tun:

<soap:Header>
    <HeaderInfo xmlns="http://foo.bar.com/ns">
        abc-unique-token
    </HeaderInfo>
</soap:Header>

Aber die „Header“ Knoten das Kind „Token“ Knoten zu Surround „abc-unique-Token“ fehlt und ich bin nicht sicher, wie es in dorthin zu gelangen.

Gibt es eine einfache Sache, die ich an das Header-Konstruktor übergeben kann, um diesen Knoten zu erstellen?

separate Post spricht über eine andere Technik verwenden, aber dies wirft Fehler für mich um die SoapFactory wenn ich versuche, es zu benutzen.

Ein großer Teil der anderen Sachen, die ich habe gerät in um etwas gefunden, die Erweiterung eine AbstractPhaseInterceptor Klasse mit einem Bündel von zusätzlichem Code zu erstellen, wenn das, was ich will so nah ist.)

War es hilfreich?

Lösung

Ich konnte es zur Arbeit kommen mit diesem nach herauszufinden, dass die SOAPFactory Methode in der separaten Post, dass ich brauchte saaj-impl.jar zur Arbeit erwähnt:

List<Header> headers = new ArrayList<Header>()
SOAPFactory sf = SOAPFactory.newInstance()
def authElement = sf.createElement(new QName("http://foo.bar.com/ns", "HeaderInfo"))
def tokenElement = authElement.addChildElement("token")
tokenElement.addTextNode("abc-unique-token")
SoapHeader tokenHeader = new SoapHeader(
    new QName("http://foo.bar.com/ns", "HeaderInfo"), authElement);
headers.add(tokenHeader);
proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)

Ich bin immer noch neugierig (und würde eine Antwort akzeptieren) tut es um die CXF empfohlen, und das Hinzufügen eines Knotens Kindes in der Header-Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top