Con CXF (en realidad GroovyWS), como genero un encabezado SOAP con un nodo hijo que tiene un nodo de texto?

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

Pregunta

Estoy creando un cliente maravilloso para un servicio SOAP .NET que requiere un encabezado de jabón que es similar al siguiente:

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

la AYUDA para añadir cabeceras de los mensajes CXF y eso me pone casi allí, pero no del todo. El ejemplo que dan a la opción 4 se ve así:

    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)

El uso de este código, que puede llegar a hacer esto:

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

Sin embargo, el nodo "HeaderInfo" no se encuentra el niño "token" nodo de envolvente "abc-única-token" y no estoy seguro de cómo llegar ahí dentro.

¿Hay alguna cosa simple que me puede pasar al constructor de cabecera para crear ese nodo?

A post aparte habla sobre el uso de una técnica diferente, pero esto arroja errores para mí todo el SOAPFactory cuando trato de usarlo.

La mayor parte de las otras cosas que he encontrado se mete en la necesidad de crear algo que se extiende una clase AbstractPhaseInterceptor con un montón de código adicional, cuando lo que quiero es tan cerca:.)

¿Fue útil?

Solución

Yo era capaz de conseguir que funcione usando esto después de averiguar que el método SOAPFactory en el post aparte de que he mencionado es necesario saaj-impl.jar al trabajo:

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)

Todavía estoy curioso (y aceptaría una respuesta) en torno a hacerlo de la manera CXF recomendada y la adición de un niño nodo a la clase de cabecera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top