¿Cómo agregar un encabezado de soap definido en un wsdl a un cliente de servicio web en CXF?

Tengo un wsdl que define un encabezado soap que se debe pasar al llamar al servicio web.

El encabezado SOAP de muestra es:

  User    

Wsdl2java de CXF generó una clase java “AuthenticationInfo” que puedo crear y rellenar con un nombre de usuario y contraseña, pero no conozco la forma correcta de pasarla al Cliente CXF cuando llame al servicio web.

Bueno, la forma más sencilla de hacer esto sería crear un ArrayList de objetos de Header y agregar todos sus parámetros o un Map y agregar todos sus encabezados como map.put("param1",param1).

Finalmente, obtenga su contexto de solicitud y agregue esta lista de arrays del mapa como

 requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, soapHeaders); 

Si está intentando pasar encabezados de soap personalizados, consulte ESTE ENLACE .

Los escollos generales se han mencionado en ESTA DISCUSIÓN . Puede ser útil para ti.

Si el encabezado SOAP está definido en el WSDL, puede especificarse implícito o explícito .

CXF proporciona la herramienta wsdl2java para generar una interfaz de servicio Java a partir de WSDL. En el caso de encabezados explícitos, los encabezados SOAP se detectan automáticamente y se ponen a disposición como parte de la interfaz de servicio que se genera.

Si los encabezados SOAP se han definido implícitamente, entonces debe habilitar la opción -exsh que activa el procesamiento de los encabezados SOAP implícitos. Nuevamente, los encabezados SOAP estarán disponibles como parte de la interfaz Java del servicio que se genera. Si desea un ejemplo concreto, puede consultar una publicación de blog que hice sobre cómo agregar un encabezado jax cxf .

Tenga en cuenta que CXF también admite otras formas de agregar encabezados SOAP .