Tuesday, September 14, 2010

Consumir WebService com autenticação usando o wsimport

O wsimport é uma ferramenta bem simples, aquelas de linha de comando, disponibilizada no jdk. Sua função é criar a infra-estrutura necessária para "consumir" Web Services a partir do wsdl, sem muita dor de cabeça. Na realidade o wsimport gera o código baseado no JAX-WS resolvendo a burocracia para acionar o Web Service com o mínimo de esforço.

Um exemplo de como usar o wsimport:
wsimport -p br.com.yaw.ws -s src -d bin http://url.servico/xpto?wsdl

O parametro -p indica o pacote para a geração das classes java, -s o diretório dos fontes e -d conteúdo output (binário por exemplo). Por fim, o mais importante, a caminho do wsdl.

O código gerado não é complexo e depende só do jdk, sem a necessidade de outra API ou de algum container JEE. Simples assim, é só criar uma classe c/ main e com código acionando o webservice...

De forma geral o wsimport gera uma classe Service que representa o webservice no cliente, factory do Proxy que faz a comunicação c/ o EndPoint.
Um "pseudo-código" para consumir um catalogo de produtos seria:

CatalogoProdutosService service = new CatalogoProdutosService();
CatalogoProdutos proxy = service.getCatalogoProdutosPort();
List<Produtoto> produtos = proxy.getProdutos();

E se o EndPoint exige autenticação? Muito simples, o objeto Proxy (CatalogoProdutos é uma interface) também implementa BindingProvider que provê acesso ao protocolo e contexto vinculado. Através dela configuro o usuário e senha, o código ficaria:

CatalogoProdutosService service = new CatalogoProdutosService();
CatalogoProdutos proxy = service.getCatalogoProdutosPort();
//dados para o login 
((BindingProvider)proxy).getRequestContext()
     .put(BindingProvider.USERNAME_PROPERTY, "jose");
((BindingProvider)proxy).getRequestContext()
     .put(BindingProvider.PASSWORD_PROPERTY, "123");
List<Produtoto> produtos = proxy.getProdutos();

Para usar Web Service com Http(s) primeiro é necessário importar o certificado e alterar a url do wsdl.


http://twitter.com/edermag
http://www.yaw.com.br

1 comment:

Rastaman said...

Olá Eder, to tendo dificuldades de gerar as classes de consumo do webservice: https://webservice.comunika.com.br/WSComunika/WSReceive?wsdl

Estou tentando através do netbeans você sabe o que pode estar ocorrendo?
to tentando varios tutoriais disponíveis na internet mas até agora não obtive êxito