Prática em Laboratório N.02 Criando um serviço Web via NetBeans O objetivo deste exercício é criar um projeto apropriado para desenvolver um contêiner que você resolva utilizar. Uma vez criado o projeto, você irá criar nele um serviço Web. Escolhendo um contêiner Você pode implantar o serviço Web em um contêiner da Web. 1. Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Selecione aplicação Web na categoria Java. 2. Nomeie o projeto CalculatorWSApplication e clique em Próximo. 3. Selecione o servidor GlassFish V2 e clique em Finalizar. Criando um serviço Web a partir de uma classe Java 1. Clique com o botão direito do mouse no nó CalculatorWSApplication e escolha Novo > Serviço Web. 2. Chame o serviço Web de CalculatorWS e digite org.me.calculator no Pacote. 3. Deixe selecionado Criar serviço Web do início. 4. Clique em Finalizar. A janela Projetos exibe a estrutura do novo serviço Web e o código-fonte é mostrado na área do editor. Criando o serviço Web O objetivo deste exercício é adicionar ao serviço Web uma operação que adiciona dois números recebidos de um cliente. Adicionando uma operação ao serviço Web 1. Passe para visualização Desenho. (Observação: a Visualização prévia não está habilitada no NetBeans 6.5.1.) 2. Clique em Adicionar operação no Visual Designer. Aparece uma caixa de diálogo onde você pode definir a nova operação. 3. Na parte superior da caixa de diálogo Adicionar operação, digite add em Nome e digite int no Tipo de retorno. Na parte inferior da caixa de diálogo Adicionar operação, na aba Parâmetros, clique em Adicionar e crie um parâmetro de tipo int chamado i. Em seguida, clique em Adicionar novamente e crie um parâmetro de tipo int chamado j. Agora você deve ver o seguinte: 4. Clique em OK na parte inferior da caixa de diálogo Adicionar operação. O Visual Designer agora exibe o seguinte: 5. Clique em Código-fonte e visualize o código que você gerou nas etapas anteriores. Você verá algo semelhante a imagem abaixo. 6. No editor, insira código na operação add da seguinte forma: int k = i + j; return k; Como você pode ver no código acima, o serviço Web simplesmente recebe dois números e retorna a soma deles. Na próxima seção, você usa o IDE para testar o serviço Web – porém antes salve seu projeto. Implantando e testando o serviço Web Quando você implanta um serviço Web em um contêiner da Web, o IDE permite que você teste o serviço Web para ver se funciona como o esperado. A aplicação de teste, fornecida pelo GlassFish, é integrada no IDE para essa finalidade. Para testar um deployment bem-sucedido em um contêiner da Web: 1. Clique com o botão direito do mouse no projeto e escolha Implantar. O IDE inicia o servidor de aplicativo, constrói e implanta o aplicativo no servidor. Você pode acompanhar o progresso dessas operações no CalculatorWSApplication (run-deploy) e na aba GlassFish na janela Saída. 2. Na aba Projetos do IDE, expanda o nó Serviços Web do projeto CalculatorWSApplication. Clique com o botão direito do mouse no nó CalculatorWS e escolha Testar serviço Web. O IDE abre a página do testador em seu navegador, caso você tenha implantado uma aplicação Web no GlassFish. Digite dois número – por exemplo, 2 e 3. A soma dos dois números é exibida: Clique com o botão direito do mouse no nó do projeto, escolha Propriedades e clique em Executar. Digite /CalculatorWSService?Tester no campo URL relativa. Consumindo o serviço Web Agora que você implantou o serviço Web, precisa criar um cliente para utilizar o método add do serviço Web. Aqui, você cria três clientes — uma classe Java em uma aplicação Java SE, um servlet e uma página JSP em uma aplicação Web. . Cliente 1: Classe Java na aplicação Java SE Nesta seção, você cria um aplicativo Java padrão. O assistente usado para criar o aplicativo também criará uma classe Java. Em seguida, você usa as ferramentas do IDE para criar um cliente e consumir o serviço Web que criou. Se estiver usando o JDK 6 com o NetBeans 6.5, você deve ter o JDK 6, atualização 7 ou posterior. 1. Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Selecione Aplicativo Java na categoria Java. Nomeie o projeto CalculatorWS_Client_Application. Deixe selecionada a opção Criar classe principal e aceite todas as outras configurações padrão. Clique em Terminar. 2. Clique com o botão direito do mouse no nó CalculatorWS_Client_Application e escolha Novo > Cliente do serviço Web. 3. Em Projeto, clique em Navegar. Navegue até o serviço Web que você deseja consumir. Depois de selecionar o serviço Web, clique em OK. 4. Deixe as outras configurações com o padrão e clique em Finalizar. A janela Projetos exibe o novo cliente de serviço Web, com um nó para o método add que você criou: 5. Clique duas vezes em Main.java para abri-lo no Editor de código-fonte. Exclua o comentário TODO e arraste o nó add acima para a linha vazia. Agora você deve ver o seguinte: public static void main(String[] args) { try { // Call Web Service Operation org.me.calculator.CalculatorWSService service = new org.me.calculator.CalculatorWSService(); org.me.calculator.CalculatorWS port = service.getCalculatorWSPort(); // TODO initialize WS operation arguments here int i = 0; int j = 0; // TODO process result here int result = port.add(i, j); System.out.println("Result = "+result); } catch (Exception ex) { // TODO handle custom exceptions here } } Observação: como alternativa, em vez de arrastar o nó add, você pode clicar com o botão direito do mouse no editor e escolher (na versão 6.7 e posteriores) Inserir código > Chamar operação de serviço Web ou (na versão 6.5.1 e anteriores) Recursos do cliente de serviço Web > Chamar operação de serviço Web. 6. Inicialize os dois ints. Altere apenas os valores dos dois ints acima de 0 para outros inteiros, como 3 e 4. 7. No bloco catch, substitua o TODO comentado por System.out.println("exception" + ex);. 8. Clique com o botão direito do mouse no nó do projeto e escolha Executar. A janela Saída agora mostra a soma: compile: run: Result = 7 BUILD SUCCESSFUL (total time: 1 second) Cliente 2: Servlet na aplicação Web Nesta seção, você cria uma nova aplicação Web e, depois disso, cria um servlet. Em seguida, usa o servlet para consumir o serviço Web que criou no início deste tutorial. Importante: se estiver usando o JDK 6, você deve ter o JDK 6, atualização 7 ou posterior. 1. Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Na categoria Java Web, selecione Aplicação Web. Nomeie o projeto CalculatorWSServletClient. Clique em Próximo e, em seguida, em Finalizar. 2. Clique com o botão direito do mouse no nó CalculatorWSServletClient e escolha Novo > Cliente de serviço Web. O assistente para Novo cliente de serviço Web é exibido. 3. Em Projeto, clique em Navegar. Navegue até o serviço Web que você deseja consumir. Depois de selecionar o serviço Web, clique em OK. 4. Deixe as outras configurações com o padrão e clique em Finalizar. O nó Referências do serviço Web na janela Projetos exibe a estrutura do seu cliente recém-criado, incluindo a operação add que você criou anteriormente neste tutorial: 5. Clique com o botão direito do mouse no nó do projeto CalculatorWSServletClient e escolha Novo > Servlet. Chame o servlet de ClientServlet e coloque-o em um pacote chamado org.me.calculator.client. Clique em Finalizar. 6. Para tornar o servlet o ponto de entrada do aplicativo, clique com o botão direito do mouse no nó do projeto CalculatorWSServletClient e escolha Propriedades. Abra as propriedades de execução e digite /ClientServlet no campo URL relativa. Clique em OK. 7. Se estiver usando o NetBeans IDE 6.5, será necessário desativar o recurso Implantar ao salvar. Abra as propriedades de execução novamente e desmarque Implantar ao salvar. 8. Se houver ícones de erro em ClientServlet.java, clique com o botão direito do mouse no nó do projeto e selecione Limpar e construir. 9. No Editor de código-fonte, remova a linha que comenta o corpo do método processRequest. Esta é a linha: /* TODO saída da página aqui Em seguida, exclua a linha que encerra a seção do código comentado: */ Adicione algumas linhas vazias depois desta linha: out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>"); Agora, arraste o nó que representa a operação add para o espaço que você criou. O método processRequest agora tem a seguinte aparência (o código adicionado está em negrito abaixo): Observação: o código adicionado é para o JDK 6. No JDK 5, o serviço também é instanciado explicitamente. No JDK 6, o serviço é instanciado pela anotação @WebServiceRef. protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet ClientServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>"); try { // Call Web Service Operation org.me.calculator.CalculatorWS port = service.getCalculatorWSPort(); // TODO initialize WS operation arguments here int i = 0; int j = 0; // TODO process result here int result = port.add(i, j); out.println("Result = "+result); } catch (Exception ex) { // TODO handle custom exceptions here } out.println("</body>"); out.println("</html>"); out.close(); } Altere os valores de i e j por inteiros positivos, como 3 e 4, e substitua a linha TODO comentada no bloco catch por out.println("exception" + ex);. Observação: como alternativa, em vez de arrastar o nó add, você pode clicar com o botão direito do mouse no editor e escolher (na versão 6.7 e posteriores) Inserir código > Chamar operação de serviço Web ou (na versão 6.5.1 e anteriores) Recursos do cliente de serviço Web > Chamar operação de serviço Web. 10. Clique com o botão direito do mouse no nó do projeto e escolha Executar. O servidor se inicia, caso já não estivesse sendo executado; a aplicação é construída e implantada, e o navegador se abre, exibindo o resultado do cálculo, como mostrado abaixo: Cliente 3: Página JSP na aplicação Web Nesta seção, você cria uma nova aplicação Web e, em seguida, consome o serviço Web na página JSP padrão que o assistente para Aplicação Web cria. Se está usando o JDK 6, você deve ter o JDK 6, atualização 7 ou posterior. 1. Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Na categoria Java Web, selecione Aplicação Web. Nomeie o projeto CalculatorWSJSPClient. Clique em Finalizar. 2. Clique com o botão direito do mouse no nó CalculatorWSJSPClient e escolha Novo > Cliente de serviço Web. 3. Em Projeto, clique em Navegar. Navegue até o serviço Web que você deseja consumir. Depois de selecionar o serviço Web, clique em OK. 4. Deixe as outras configurações com o padrão e clique em Finalizar. A janela Projetos exibe o novo cliente de serviço Web, como mostrado abaixo: 5. No nó Referências de serviços Web, expanda o nó que representa o serviço Web. A operação add, que você invocará do cliente, agora está exposta. 6. Arraste a operação add para a página index.jsp do cliente, e solte-a abaixo das marcas H1. O código para chamar a operação de serviço agora é gerado na página index.jsp, como você pode ver aqui: 7. <% 8. try { 9. 10. 11. 12. 13. org.me.calculator.CalculatorWSService service = new org.me.calculator.CalculatorWSService(); org.me.calculator.CalculatorWS port = service.getCalculatorWSPort(); // TODO initialize WS operation arguments here 14. int i = 0; 15. int j = 0; 16. // TODO process result here 17. int result = port.add(i, j); 18. out.println("Result = "+result); 19. } catch (Exception ex) { 20. 21. // TODO handle custom exceptions here } %> Altere o valor de i e j de 0 por outros inteiros, tais como 3 e 4. Substitua a linha TODO comentada no bloco catch por out.println("exception" + ex);. 22. Clique com o botão direito do mouse no nó do projeto e escolha Executar. O servidor se inicia, caso já não esteja em execução. O aplicativo é construído e implantado, e o navegador se abre, exibindo o resultado do cálculo: