Axis2 WebService Client: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
Linha 10: Linha 10:
Por já ser uma versão legada (já temos a 1.8), a versão 1.7.9 pode ser encontrada no ''archive'' do Axis2: http://archive.apache.org/dist/axis/axis2/java/core/1.7.9/
Por já ser uma versão legada (já temos a 1.8), a versão 1.7.9 pode ser encontrada no ''archive'' do Axis2: http://archive.apache.org/dist/axis/axis2/java/core/1.7.9/


Baixe o pacote '''axis2-1.7.9-bin.zip''' e descompacte em alguma pasta de preferência, chamada de '''%AXIS2_HOME%''' deste ponto em diante.
Baixe o pacote '''axis2-1.7.9-bin.zip''' e descompacte em alguma pasta de sua preferência.


Para funcionar o Axis2 precisará de duas variáveis de ambiente definidas conforme exemplificado nos comandos a seguir:
<pre>
set JAVA_HOME=c:\Program Files\Java\jdk1.8.0_301
set AXIS2_HOME=c:\x\libs\axis2-1.7.9
</pre>
== Gerando os Stubs a Partir do WSDL ==
O Axis gera classes para acessar o WebServices a partir do arquivo '''WSDL''' de descrição do WebService. Para isso siga os seguintes passos:
# Crie uma pasta temporária onde os fontes serão gerados;
# Dentro desta pasta criada execute o comando
<pre>
%AXIS2_HOME%\bin\wsdl2Java -uri <arquivo.wsdl> -d xmlbeans -s
</pre>
O comando gerará na pasta os seguintes conteúdos:
# '''Pasta src''' - Pasta com os arquivos fontes que permitem o acesso ao WebService. Dentro desta pasta, em um ''package'' que dependerá das definições do WSDL, será criado uma classe com o sufixo '''Stub''' para cada serviço exposto no WebService.
# '''Pasta resources''' - Esta pasta contém arquivos


== Gerando o Stub para Acessar o WS ==
== Gerando o Stub para Acessar o WS ==

Edição das 18h02min de 9 de setembro de 2021

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 Axis2 v1.7.9, mesma atualmente sendo utilizada como dependência nos módulos do BIS10 e BISFW.


Baixando o Axis2

Para gerar as classes precisamos dos binários do Axis2, que podem ser baixados no site: https://axis.apache.org/axis2/java/core/download.cgi.

Por já ser uma versão legada (já temos a 1.8), a versão 1.7.9 pode ser encontrada no archive do Axis2: http://archive.apache.org/dist/axis/axis2/java/core/1.7.9/

Baixe o pacote axis2-1.7.9-bin.zip e descompacte em alguma pasta de sua preferência.

Para funcionar o Axis2 precisará de duas variáveis de ambiente definidas conforme exemplificado nos comandos a seguir:

set JAVA_HOME=c:\Program Files\Java\jdk1.8.0_301
set AXIS2_HOME=c:\x\libs\axis2-1.7.9


Gerando os Stubs a Partir do WSDL

O Axis gera classes para acessar o WebServices a partir do arquivo WSDL de descrição do WebService. Para isso siga os seguintes passos:

  1. Crie uma pasta temporária onde os fontes serão gerados;
  2. Dentro desta pasta criada execute o comando
%AXIS2_HOME%\bin\wsdl2Java -uri <arquivo.wsdl> -d xmlbeans -s

O comando gerará na pasta os seguintes conteúdos:

  1. Pasta src - Pasta com os arquivos fontes que permitem o acesso ao WebService. Dentro desta pasta, em um package que dependerá das definições do WSDL, será criado uma classe com o sufixo Stub para cada serviço exposto no WebService.
  2. Pasta resources - Esta pasta contém arquivos

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.


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.


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.


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.


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.


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.


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.