Con CXF (in realtà GroovyWS), come faccio a generare un colpo di testa SOAP con un nodo bambino che ha un nodo di testo?

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

Domanda

Sto creando un cliente Groovy per un servizio SOAP .NET che richiede un colpo di testa di sapone che assomiglia a questo:

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

le faq per aggiungere intestazioni ai messaggi CXF e mi viene quasi, ma non del tutto. L'esempio che danno per l'opzione 4 si presenta così:

    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)

Con questo codice, posso arrivare a fare questo:

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

Ma il nodo "HeaderInfo" manca il bambino "token" nodo Surround "abc-unico-token" e io non sono sicuro di come ottenere in là.

C'è qualche cosa semplice che posso passare al costruttore di intestazione per creare quel nodo?

Un post a parte parla utilizzando una tecnica diversa, ma questo genera errori per me tutto il SOAPFactory quando cerco di usarlo.

La maggior parte delle altre cose che ho trovato entra nella necessità di creare qualcosa di estendere una classe AbstractPhaseInterceptor con un gruppo di codice aggiuntivo, quando quello che voglio è così vicino:.)

È stato utile?

Soluzione

sono stato in grado di farlo a lavoro utilizzando questo dopo capire che il metodo SOAPFactory nel post a parte che ho citato necessario SAAJ-impl.jar al lavoro:

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)

Sono ancora curioso (e avrebbe accettato una risposta) attorno farlo nel modo consigliato CXF e l'aggiunta di un bambino di nodo alla classe intestazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top