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 .