Como você adiciona um header Soap definido em um wsdl a um cliente de serviço da Web no CXF?

Eu tenho um wsdl que define um header de soap que precisa ser passado ao chamar o serviço da web.

O header SOAP de amostra é:

  User    

O wsdl2java da CXF gerou uma class java “AuthenticationInfo” que eu posso criar e preencher com um nome de usuário e senha, mas não sei qual é a maneira correta de passar isso para o Cliente CXF ao chamar o serviço da web.

Bem, a maneira mais simples de fazer isso seria criar um ArrayList de objects Header e adicionar todos os seus parâmetros ou um Map e adicionar todos os seus headers como map.put("param1",param1).

Por fim, obtenha seu contexto de solicitação e adicione este arraylist do mapa como

 requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, soapHeaders); 

Se você está tentando passar headers de soap personalizados, consulte ESTE LINK .

As armadilhas gerais foram mencionadas nesta discussão . Pode ser útil para você.

Se o header SOAP estiver definido no WSDL, ele poderá ser especificado implícito ou explícito .

O CXF fornece a ferramenta wsdl2java para gerar uma interface de serviço Java a partir de um WSDL. No caso de headers explícitos, os headers SOAP são automaticamente detectados e disponibilizados como parte da interface de serviço que é gerada.

Se os headers SOAP tiverem sido definidos implicitamente, será necessário ativar a opção -exsh que aciona o processamento dos headers SOAP implícitos. Novamente, os headers SOAP serão disponibilizados como parte da interface Java do serviço que é gerada. Se você quiser um exemplo concreto, você pode conferir uma postagem no blog que eu fiz sobre como adicionar um header de soap cxf .

Observe que o CXF também suporta outras maneiras de adicionar headers SOAP .