Avec CXF (en fait GroovyWS), comment puis-je générer un en-tête SOAP avec un nœud enfant ayant un noeud de texte?

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

Question

Je crée un client Groovy pour un service SOAP .net qui nécessite un en-tête de savon qui ressemble à ceci:

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

J'ai trouvé la FAQ pour ajouter des en-têtes de messages CXF et ça me fait presque, mais pas tout à fait. L'exemple qu'ils donnent pour l'option 4 ressemble à ceci:

    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)

En utilisant ce code, je peux l'obtenir pour faire ceci:

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

Mais le « HeaderInfo » noeud manque l'enfant « jeton » noeud pour entourer « abc-jeton unique » et je ne sais pas comment l'obtenir là-dedans.

Y at-il quelque chose simple que je peux passer au constructeur d'en-tête pour créer ce noeud?

poste distinct parle en utilisant une technique différente, mais cela renvoie des erreurs pour moi autour du SoapFactory lorsque je tente de l'utiliser.

La plupart des autres choses que j'ai trouvé entre dans besoin de créer quelque chose de l'extension d'une classe AbstractPhaseInterceptor avec un tas de code supplémentaire, quand ce que je veux est si proche.)

Était-ce utile?

La solution

J'ai pu le faire fonctionner en utilisant ce après déterminer que la méthode SOAPFactory dans le poste distinct que je l'ai mentionné besoin saaj-impl.jar au travail:

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)

Je suis toujours curieux (et accepterait une réponse) autour de faire la CXF méthode recommandée et l'ajout d'un enfant de nœud à la classe d'en-tête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top