Serviço web

Na disciplina de Arquitetura Orientada a Serviço do 2º Semestre de 2022, foi definido pelo professor Julio Fernando Lieira, que os alunos desenvolvam um serviço web servisse utilizando a linguagem JAVA que ao ser acionado, devolve uma Saudação (Bom dia, Boa tarde ou Boa noite) seguido da data e hora atuais. Também será implementado o cliente que consumirá essa web service.
Criei um novo projeto (File>New>Dynamic Web Project)



Coloquei o nome do Projeto como SaudacaoHoraWS, escolhi o Tomcat como Target runtime. Clique em Next.


Na janela, fui em Next novamente. Na janela Web Module, marquei o checkbox Generate web.xml deployment descriptor. Clique em Finish.



Foi criado uma nova classe Java que vai implementar o serviço. Cliquei com o botão direito sobre o nome do projeto e selecione New>Class
No campo Name, coloquei SaudacaoHoraWS e no campo Package coloquei edu.fateclins.ws.saudacaohoraws. Clique no botão Finish.



A figura a seguir mostra o pacote criado e dentro a classe java. Também mostra o código da classe.



O método saudacaodata() não recebe parâmetro ele pega do sistema a data e a hora e retorna uma Saudação (Bom dia, Boa tarde ou Boa noite) seguido da data e hora atuais.
Para fazer com que essa classe seja uma web service, foi preciso colocar a Annotation @WebService antes da definição da classe. Note que ao fazer isso, o Eclipse vai colocar um erro na linha. Coloque o mouse sobre a linha e no menu que aparece clique em Import ‘WebService’ (javax.jws).
Fiz o mesmo para os métodos, coloque a Annotation @WebMethod antes de cada método, os quais serão os serviços que serão publicados.
Com o botão direito sobre o arquivo SoapHelloWS.java de nossa web service e selecione Run As> 1Run on Server.


Na Janela que aparece, verifiquei se o servidor Tomcat está selecionado e cliquei em Finish.
Uma aba se abriu e mostrou como resultado um erro de Not Found. Isso porque um web service não pode ser acessado simplesmente via um navegador. É necessário um cliente SOAP para consumi-lo.

Para publicar o serviço utilizei o seguinte código no final do seu código:

public static void main(String[] args) {
// Instancia a classe do Webservice
SaudacaoHoraWS saudacaohoraws = new SaudacaoHoraWS();
// URL de acesso ao serviço
String urlservico = "http://localhost:4569/saudacaohoraws";
// Mostra no console mensagem que o serviço foi iniciado
System.out.println("Serviço SaudacaoHoraWS executando na URL: " + urlservico);
// Publica o Serviço
Endpoint.publish(urlservico, saudacaohoraws);



Cliquei com o botão direito sobre o arquivo SaudacaoHoraWS.java da web service e selecionei Run As> 2Java Application.
Note que no console está sendo exibido:
Serviço SaudacaoHoraWS executando URL:http://localhost:4569/saudacaohoraws

Para ver o WSDL basta acrescentar ao final do código, e colocar a URL no navegador.
http://localhost:4569/saudacaohoraws?WSDL

Pelo SoapUI. Criei um projeto clicando no botão SOAP:

Para fazer um pedido ao serviço, selecionei o serviço saudacaodata clicando no Request1.


Foi criado o Cliente Java para consumir o Web Service SaudacaoHoraWS. Foi feito no mesmo projeto do Eclipse. Porém, o projeto do Servidor deve ser fechado. Cliquei com o botão direito no nome do projeto (SaudacaoHoraWS) e selecione a opção Close Project. Note que o Tomcat deve continuar executando e servindo nosso SaudacaoHoraWS web service.
Criei um novo projeto (File>New> Java Project). Cliquei em Next.
Coloquei o nome SaudacaoHoraWSClient. Verifiquei se o JDK 1.8 está selecionado e depois em Finish. Foi solicitado se desejava mudar a Perspectiva da Interface, respondi que não.

Cliquei com o botão direito sobre o projeto criado e selecionei New>Other. Na janela que se abre, selecione Web Services> Web Service Client. Cliquei em Next.
Na próxima Janela, em Service definition, coloquei o link para o WSDL da web service, o qual pode ser obtido no console mostrado anteriormente.
Note que foi criado no projeto o pacote edu.fateclins.ws.saudacaohoraws, contendo os códigos Java para acesso ao web service SaudacaoHoraWS.

Crie uma nova classe Java. Clique com o botão direito sobre o nome do projeto e selecione New> Class.
Coloquei o nome SaudacaoHoraWSClient, como package coloque edu.fateclins.ws.saudacaohorawsclient e marque o checkbox public static void main(String[] args) para gerar o método main(). Depois clique em Finish.

Para acessar o web service, tive que instanciar um objeto da classe SaudacaoHoraWSProxy.java do pacote edu.fateclins.ws.saudacaohorawsclient, pois é esta que possui o método saudacaodata(), como mostrado na figura a seguir.

No método main() da classe SaudacaoHoraWSClient, acrescentei a seguinte linha de comando:
SaudacaoHoraWSProxy wsproxy = new SaudacaoHoraWSProxy();
Note que o Eclipse vai colocar uma marcação de erro na linha. Isso porque devemos importar a classe SaudacaoHoraWSProxy. Para isso, coloque o mouse sobre o nome do método e, no menu que aparece, selecione a opção Import ‘SaudacaoHoraWSProxy’ (edu.fateclins.ws.saudacaohoraws).

O próximo passo foi chamar o método saudacaodata() do objeto wsproxy e exibir o resultado. Para tanto, coloquei a seguinte linha de comando logo abaixo da linha anterior:
System.out.println(wsproxy.saudacaodata());
Novamente o Eclipse fez uma notação de erro na linha. Agora o erro informado é Unhandled exception type Remote Exception, ou seja, o Eclipse está dizendo que esta ação pode gerar um erro (exception) que nós não estamos tratando. Para corrigir, selecionei a opção Surround with try/catch.
O código ficará da seguinte forma:

Note que a chamada à web service foi colocada dentro de um try/catch. Esta é a forma de tratamento de exceções. Caso ocorra algum erro (exception) na execução da chamada ao web service hello(), será executado a parte dentro do catch, o qual captura a exception e mostra toda a pilha (Stack) de execução para que possa verificar onde houve erro. Essa parte pode ser melhorada, mostrando mensagens mais amigáveis ao usuário final.
Salvei e testei a aplicação. Cliquei com o botão direito no código e selecione Run As> 1 Java Application.
Agora note que no console já está sendo exibido a hora e a saudação faltando somente exportar o JAR.
Veja o resultado exibido no console de execução.

Para executar o programa fora do Eclipse é necessário compactar todos os recursos utilizados pelo programa em um arquivo chamado JAR (Java ARchive).
Para gerar esse arquivo, cliquei com o botão direito sobre o nome do Projeto e no menu selecione Export...
Na Janela que se abre, selecionei Java>Runnable JAR file e cliquei em Next.

Na próxima janela, em Launch configuration selecionei a classe que contém o método main. Depois escolhi o diretório e o nome que foi dado ao arquivo .jar em Export destination.

Para executar, abra um prompt de comandos, vá até o diretório onde foi gerado o .JAR e execute o comando:
Java -Jar SaudacaoHoraWSClient.jar

Tudo OK note que o sistema retornou a Saudação, Data e a Hora.
Conclui após este projeto a trabalhar com o Web Service e a criação dos mesmos tendo apreendido os fundamentos foi possível a elaboração deste projeto o qual desenvolvemos o serviço, cliente e o cliente fora do eclipse.


Localização