Axis2 WebService Client

De BIS Wiki
Ir para navegação Ir para pesquisar

Este documento relata a maneira mais fácil de construir um webservice client utilizando o Axis2 para gerar as classes de acesso a partir do WSDL. Utilizaremos o Axis 2 ao invés do primeiro (que já vem com o Eclipse) porque normalmente gera apenas dois arquivos, e gera objetos próprios para carregar todas as informações necessárias para acessar e receber as informações do WebService.

Preparando o Eclipse

Antes de gerar as classes necessárias é preciso que o Eclipse tenha o Axis 2 configurado, já que não vem nativamente com a instalação do Eclipse. Primeiro precisamos fazer o download da biblioteca do Axis (use o .WAR) e salvar em alguma pasta conveniente para o Eclipse encontrar. O BISERP já contém as biblicas do axis2, mas são apenas para runtime, não para a geração do código.

O Axis pode ser baixado a partir deste link: http://ws.apache.org/axis2/download.cgi.


Note 64.png
Extraia o ZIP
Observe que o arquivo baixado é um .ZIP, o .WAR tem que ser extraído para que o Eclipse o encontre!


Com o Axis 2 baixado e extraído, vá no menu Window -> Preferences e encontre na árvore a esquerda o item Axis2 Prefences. Na aba Axis2 RunTime indique o diretório onde você extraiu o .WAR, se o Eclipse encontrar o Axis 2 ele mostrará uma mensagem avisando assim que o campo perder o foco, como mostra a imagem abaixo:

Axi2WSClient1.jpg


Gerando o Stub para Acessar o WS

O primeiro passo a fazer é acessar o endereço do WebService que deseja acessar pelo browser e salvar o WSDL que descreve o serviço. Como exemplo, criaremos o client para acessar o WebService da Receita da Fazenda de São Paulo utilizado para enviar, consultar e retificar arquivos gerados pelo ECF da Nota Paulista.

O endereço deste webservice é https://www.nfp.fazenda.sp.gov.br/ws/arquivocf.asmx, ao acessa-lo pelo browser podemos notar o link que fornece o WSDL sobre o link "Service Description", e o salvamos com a extensão WSDL, mesmo que o browser não o forneça a extensão adequada.

Axi2WSClient2.jpg


Com o Axis 2 e o WSDL salvo, temos quase tudo o que precisamos para o Eclipse gerar as classes de acesso do WebService. O que falta agora é um "Dynamic Web Project", cuja versão do "Dynamic Web Module Version" não seja maior que 2.5. Também é necessário clicar no botão "Modify" da sessão de configuração e ativar as opções da imagem abaixo:

O Axis 2 apenas suporta até a versão 2.5, embora as classes que vamos gerar possam ser usadas tranquilamente em qualquer lugar, inclusive fora de projetos Web, como é o caso do BIS em que o acesso é feito pelo Core, e o código fica no .jar do EJB. Para isso crie um projeto temporário para o Axis usar, no fim do processo apagaremos ele.

Axi2WSClient3.jpg
Axi2WSClient4.jpg


Com o projeto criado, pressione CTRL+N, ou vá ao menu File -> New... -> Other e no Wizard que aparece encontre a opção "Web Service Client" e click em Next.

Axi2WSClient5.jpg


Na tela seguinte, indique o arquivo WSDL que salvamos do endereço do webservice. Na barra vertical a esquerda escolha apenas a opção "Assmble Client" para que o Axis se limite apenas em fazer as clases como queremos. Na sessão de configuração há três opções a serem definidas:

  • Web Service Runtime: Deve escolher Axis2 ou o Eclipse usará outra engine para gerar as classes.
  • Client Project: Se o eclipse não escolheu o projeto corretamente, clique e altere para o projeto web que criamos antes, pois será onde ele colocará as classes geradas.
  • Client EAR project: Ele exige um EAR para gerar as classes (para o caso da opção de deploy ser escolhida na barra), para não misturar com o projeto do BISERP, clique nessa opção e na caixa de baixo onde deve escolher o projeto
  • EAR digite um nome qualquer, ele criará o projeto do tipo EAR. Nos apagaremos ele posteriormente junto com o WebProject.

Tudo definido? Click em Finish.

Axi2WSClient6.jpg


Se tudo correu bem, temos agora no projeto no mínimo duas classes, sendo que uma dela deve ter o sufixo Stub. É através desta classe que acessaremos os métodos do WebService. Basta criar uma instância dela e nela devemos encontrar os métodos tal como é oferecido no webservice. Deixando a chamada completamente transparente para o desenvolvedor.


Note 64.png
Paremetros dos Métodos e Objetos de Retorno
Os métodos do WebServices traduzidos pelo Axis 2, através do Stub, pode gerar muitos objetos de acordo com a especificação do WSDL. Esses objetos também serão criados pelo Axis e serão salvos como Inner Classes dentro dos dois arquivos (classes) que ele gerou.

Basta agora populalos com as informações desejadas para enviar para o WebService e tratar o objeto devolvido.


Stop 256.png
Problemas de Conexão e Autenticação
Com as classes criadas até este momento é possível acessar um WebService perfeitamente. No entanto, praticamente todos os WebServices tem o endereço em HTTPS, ou seja, usam SSL ou algum outro protocolo para encriptar a transmissão dos dados. Em alguam atualização o Java deixou de "confiar cegamente" nos certificados oferecidos por qualquer provedor HTTPS, fazendo com que a conexão seja rejeitada.

Para resolver esse problema é preciso configurar as conexões HTTPS e SSL, pois não é mais um problema de conguração do WebService.