Com o CXF (na verdade, GroovyWs), como faço para gerar um cabeçalho de sabão com um nó filho com um nó de texto?

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

Pergunta

Estou criando um cliente groovy para um serviço de sabão .NET que requer um cabeçalho de sabão que se pareça com o seguinte:

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

eu encontrei as perguntas frequentes para adicionar cabeçalhos às mensagens CXF E isso me deixa quase lá, mas não exatamente. O exemplo que eles dão para a opção 4 se parecem:

    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)

Usando este código, posso fazer isso para fazer isso:

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

Mas o nó "headerinfo" está faltando o nó do token da criança "para cercar" ABC-Unique-Token "e não tenho certeza de como colocá-lo lá.

Existe alguma coisa simples que eu possa passar para o construtor de cabeçalho para criar esse nó?

UMA postagem separada fala sobre o uso de uma técnica diferente, mas isso lança erros para mim em torno da fábrica de sabão quando tento usá -la.

Muitas das outras coisas que eu encontrei precisam criar algo que estenda uma classe abstrataPhaseInterceptor com um monte de código adicional, quando o que eu quero é tão perto :).

Foi útil?

Solução

Consegui fazê-lo funcionar usando isso depois de descobrir que o método de sabão no post separado que mencionei necessário saaj-impl.jar para trabalhar:

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)

Ainda estou curioso (e aceitaria uma resposta) em torno de fazê -lo a maneira recomendada pela CXF e adicionar uma criança do nó à classe de cabeçalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top