<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><link rel="stylesheet" href="../../../print.css" type="text/css" media="print">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Introdução aos Web Services JAX-WS - Tutorial do NetBeans IDE</title>
  <meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION, WEB SERVICE, WEB SERVICES, SOAP, CLIENT, JAX-WS">
  <meta name="description"
        content="This tutorial shows how to use NetBeans IDE 7.0 or later to develop a JAX-WS web service
        and consume it in a Java class in a Java SE application, or in
        a servlet or JSP page">
  <link rel="stylesheet" href="../../../netbeans.css"></head>
<body>
  <h1>Introdução aos Web services JAX-WS</h1>


  <p><a href="http://www.jcp.org/en/jsr/detail?id=224" target="_blank">Java API para Web services XML (JAX-WS), JSR 224</a> é uma parte importante das plataforma Java EE. Uma sequência da release da API Java para RPC 1.1 (JAX-RPC) com base em XML, o JAX-WS simplifica a tarefa de desenvolvimento de Web services utilizando a tecnologia Java. Ela aborda alguns dos problemas em JAX-RPC 1.1, fornecendo suporte a vários protocolos, como SOAP 1.1, SOAP 1.2, XML, e fornecendo um recurso para dar suporte a protocolos adicionais junto com HTTP. O JAX-WS usa JAXB 2.0 para vinculação de dados e dá suporte a personalizações para controlar interfaces de ponto final de serviço geradas. Com suporte a anotações, o JAX-WS simplifica o desenvolvimento do Web service e reduz o tamanho de arquivos JAR do run-time.</p>

  <p>Este documento demonstra os conceitos básicos sobre o uso do IDE para desenvolver um Web service JAX-WS. Após criar o Web service, você escreve três clientes de Web service diferentes que usam Web service em uma rede, denominado "consumo" de um Web service. Os três clientes são uma classe Java em uma aplicação Java SE, um servlet e uma página JSP em uma aplicação Web. Um tutorial mais avançado que se concentra em clientes é <a href="./client.html">Desenvolvendo Clientes de Web Service JAX-WS</a>.</p>



  <p><b>Conteúdo</b></p>

  <img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0">

  <ul><li><a href="#Exercise_1"> Criando um Web Service</a></li>
    <li><a href="#Exercise_2"> Criando o Web Service</a></li>
    <li><a href="#Exercise_2_1"> Implantando e Testando o Web Service</a></li>
    <li><a href="#samples">Amostras</a></li>
    <li>
    Consumindo o Web Service em
    <ul><li><a href="#Exercise_3_1">uma classe Java em uma Aplicação Java SE</a></li>
      <li><a href="#Exercise_3_2">um servlet em uma aplicação Web</a></li>
      <li><a href="#Exercise_3_3">uma página JSP em uma aplicação Web</a></li>
    </ul>
  </ul>




<p><b>Para seguir este tutorial, são necessários os recursos e o software a seguir.</b></p>

  <table>
    <tbody>
      <tr>
        <th class="tblheader" scope="col">Software ou Recurso</th>
        <th class="tblheader" scope="col">Versão Necessária</th>
      </tr>
      <tr>
        <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">NetBeans IDE</a></td>
        <td class="tbltd1">Pacote de download do Java EE</td>
      </tr>
      <tr>
        <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">JDK (Java Development Kit)</a></td>
        <td class="tbltd1">JDK 7 ou JDK 8<br></td>
      </tr>
      <tr>
        <td class="tbltd1">Servidor de aplicações ou Web compatível com Java EE</td>
        <td class="tbltd1">
          GlassFish Server Open Source Edition <br> Oracle WebLogic Server</td>
      </tr>

    </tbody>
  </table>
 
<p class="notes"><strong>Observação: </strong>o GlassFish Server pode ser instalado com a distribuição de Java EE do NetBeans IDE. Como alternativa, você pode visitar a <a href="https://glassfish.java.net/download.html">página de downloads do GlassFish Server</a> ou a <a href="http://tomcat.apache.org/download-60.cgi" target="_blank">página de downloads do Apache Tomcat</a>.</p>
<p class="alert"><strong>Importante: </strong>os projetos Java EE requerem GlassFish Server ou Oracle WebLogic Server 12c.
</p>
<p class="alert">O servidor web de Tomcat incorporado não é um servidor web totalmente compatível com Java EE. No entanto, o servidor web Tomcat 7.x pode ser configurado para suportar alguma funcionalidade de Java EE. Consulte o <a href="http://openejb.apache.org/" target="_blank">Projeto Apache para EE</a> para obter informações sobre como adicionar suporte ao Java EE para Tomcat.</p>
<!-- ===================================================================================== -->
  <h2><a name="Exercise_1"></a>
    <!--Exercise 1: -->
  Criando um Web Service</h2>
  <p>O objetivo deste exercício é criar um projeto apropriado para o contêiner de implantação que você decidir utilizar. Uma vez criado o projeto, você irá criar nele um Web service.</p>
  <div class="indent">
    <h3 class="tutorial">Escolhendo um Contêiner</h3>
    <p>Você pode implantar o Web service em um contêiner Web ou em um contêiner EJB. Isso depende das suas escolhas de implementação. Se estiver criando uma aplicação Java EE, use um contêiner Web, pois você pode colocar EJBs diretamente em uma aplicação Web. Por exemplo, se você planeja implantar no Servidor Web Tomcat, que tem somente um contêiner Web, crie uma aplicação Web, não um módulo EJB.</p>

    <ol>

      <li> Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS). Selecione Aplicação Web na categoria Java Web ou Módulo EJB na categoria Java EE. 
      <p class="notes">Você pode criar um Web service JAX-WS em um projeto Maven. Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS) e o módulo Aplicação Web Maven ou Maven EJB na categoria Maven. Se você nunca tiver usado Maven com NetBeans antes, consulte <a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Melhores Práticas para o Maven</a>.
      </li>

      <li>Nomeie o projeto <tt>CalculatorWSApplication</tt>. Selecione uma localização para o projeto. Clique em Próximo.
      <li>Selecione o servidor e a versão do Java EE e clique em Finalizar. 
        <p class="notes">Para usar o Oracle WebLogic server, <a href="../web/jsf-jpa-weblogic.html#01">registre o servidor no IDE</a>. Além disso, se você estiver usando o WebLogic server, observe a screencast em <a href="../javaee/weblogic-javaee-m1-screencast.html">Implantando uma Aplicação Web para Oracle WebLogic</a>.</p> </li>
    </ol>
    <h3 class="tutorial">Criando um Web Service com base em uma Classe Java</h3>
    <ol>

      <li>Clique com o botão direito do mouse no nó <tt>CalculatorWSApplication</tt> e selecione Novo > Web Service.</li>

      <li>Chame o Web service de <tt>CalculatorWS</tt> e digite <tt>org.me.calculator</tt> no Pacote. Deixe Criar Web Service do Início selecionado.</li>

      <li>Se você estiver criando um projeto Java EE em GlassFish ou WebLogic, selecione Implementar Web Service como um Bean de Sessão Sem Estado. <br> <img alt="Assistente Novo Web Service para EE, com opções do bean" class="margin-around b-all" height="365" src="../../../images_www/articles/72/websvc/jax-ws/generate-ws-ee6.png" width="528"></li>
      <li>Clique em Finalizar. A janela Projetos exibirá a estrutura do novo Web service e o código-fonte será mostrado na área do editor.<br>
      </li>
    </ol>
  </div>

  <!-- ===================================================================================== -->
  <h2><a name="Exercise_2"></a>
    <!--Exercise 2: -->
  Adicionando uma Operação ao Web service</h2>

<p>O objetivo deste exercício é adicionar ao Web service uma operação que adiciona dois números recebidos de um cliente. O NetBeans IDE oferece uma caixa de diálogo para adicionar uma operação a um Web service. Você pode abrir essa caixa de diálogo no visual designer para Web service ou no menu de contexto do Web service. </p>
<p class="alert"><b>Advertência:</b> o visual designer não está disponível em projetos Maven.</p>
<p><strong>Para adicionar uma operação ao Web service:</strong></p>
    <ol>

      <li>Ou:<ul>
        <li>Altere a view do Design no editor. <br> <img alt="View do Design do editor do Web service" class="margin-around b-all" height="454" src="../../../images_www/articles/72/websvc/jax-ws/design-view.png" width="436">  </li></ul>
        <p>Ou:</p>
        <ul>
          <li>Localize o nó do Web service na janela Projetos. Clique com o botão direito do mouse no nó. Aparecerá um menu de contexto.<br> <img alt="Menu de contexto do nó do Web service com o item Adicionar Operação realçado" class="margin-around b-right b-bottom" height="274" src="../../../images_www/articles/72/websvc/jax-ws/add-op-cx-menu-item.png" width="259"></li></ul></li>
      <li>Clique em Adicionar Operação no designer visual ou no menu de contexto. A caixa de diálogo Adicionar Operação será aberta.</li>
      <li>Na parte superior da caixa de diálogo Adicionar Operação, digite <tt>add</tt> em Nome e digite <tt>int</tt> na lista drop-down Tipo de Retorno.</li>
      <li>Na parte inferior da caixa de diálogo Adicionar Operação, clique em Adicionar e crie um parâmetro de tipo <tt>int</tt> chamado <tt>i</tt>.</li>
      <li>Clique novamente em Adicionar e crie um parâmetro de tipo <tt>int</tt> chamado de <tt>j</tt>.
      <p>Agora você deverá ver o seguinte:</p>
      <br><img alt="Caixa de diálogo Adicionar Operação" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-add-operation.png"></li>
      <li>Clique em OK na parte inferior da caixa de diálogo Adicionar Operação. Você retornará ao editor.</li>
      <li>Remova a operação <tt>hello</tt> default deletando o método <tt>hello()</tt> no código-fonte ou selecionando a operação <tt>hello</tt> no visual designer e clicando em Remover Operação.

      <p>O visual designer agora exibe o seguinte:</p>

      <br><img alt="Visual designer do Web service que mostra operação adicionada" class="margin-around b-all" height="478" src="../../../images_www/articles/72/websvc/jax-ws/design-view-with-op.png" title="Visual designer do Web service que mostra operação adicionada" width="449"></li>
      
      <li>Clique em Código-Fonte e exiba o código que você gerou nas etapas anteriores. Será diferente se você tiver criado o serviço como um bean sem estado Java EE6 ou não. Você pode perceber as diferenças das telas abaixo? (Um serviço Java EE 6 ou Java EE 7 que não é implementado como bean sem estado parece um serviço Java EE 5.)<br> <img alt="Resultado: EE5" class="margin-around b-top b-left" height="441" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-source.png" width="412"> <img alt="Resultado: bean sem estado EE 6" class="margin-around b-all" height="469" src="../../../images_www/articles/72/websvc/jax-ws/stateless-ejb-code1.png" width="389">
      <p class="notes"><strong>Observação.</strong> No NetBeans IDE 7.3 e 7.4 você verá que na anotação <tt>@WebService</tt> gerada, o nome do serviço é especificado explicitamente:<br> <tt>@WebService(serviceName = "CalculatorWS")</tt>.</p>
      </li>
      <li>No editor, estenda a operação de esqueleto <tt>add</tt> para o seguinte (alterações em negrito):

        <pre class="examplecode">    @WebMethod
    public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
        <b>int k = i + j;</b>
        return <b>k</b>;
      }</pre></li>
    </ol>

<p>Como você pode ver no código acima, o Web service simplesmente recebe dois números e retorna a soma deles. Na próxima seção, você usa o IDE para testar o Web service.

  

  <!-- ======================================================================================== -->

<h2 class="tutorial"><a name="Exercise_2_1"></a>Implantando e Testando o Web service</h2>

  <p>Depois de implantado um Web service em um servidor, você poderá usar o IDE para abrir o cliente de teste do servidor, caso ele tenha um cliente de teste. Os servidores GlassFish e WebLogic oferecem clientes de teste. </p>
  <p>Se você estiver usando o servidor Web Tomcat, não haverá cliente de teste. Você só poderá executar o projeto e ver se a página de web services do Tomcat é aberta. Nesse caso, antes de executar o projeto, é preciso tornar o web service o ponto de entrada da aplicação. Para tornar o web service o ponto de entrada da aplicação, clique com o botão direito do mouse no nó do projeto  CalculatorWSApplication e selecione Propriedades. Abra as propriedades de Executar e digite <tt>/CalculatorWS</tt> no campo URL Relativo. Clique em OK. Para executar o projeto, clique com o botão direito do mouse no nó do projeto novamente e selecione Executar.</p>
<p><b>Para testar a implantação bem-sucedida em um servidor GlassFish Server ou WebLogic: </b></p>

  <ol>
    <li>Clique com o botão direito do mouse no projeto e selecione Implantar. O IDE inicia o servidor de aplicações, constrói a aplicação e a implanta no servidor. Você pode acompanhar o progresso dessas operações no CalculatorWSApplication (run-deploy) e nas guias do GlassFish Server ou Tomcat na view Saída.</li>
    <li>Na guia Projetos do IDE, expanda o nó Web Services do projeto CalculatorWSApplication. Clique com o botão direito do mouse no nó CalculatorWS e selecione Testar Web Service. <br> <img alt="Guia Projetos que mostra a opção de menu de contexto Testar Web Service" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-testws.png">
      <p>O IDE abrirá a página de teste em seu browser, se você tiver implantado uma aplicação Web no GlassFish Server. Para o servidor Web Tomcat e a implantação de módulos EJB, a situação é diferente:</p>

      <ul>
        <li>Se você tiver implantado no GlassFish Server, digite dois números na página de teste, como mostrado abaixo: <br><img alt="Página de teste do Web service quando o serviço foi implantado com êxito no GlassFish Server" class="margin-around b-all" height="283" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-tester.png" width="497">
          <p>A soma dos dois números é exibida:</p>
        <br><img alt="Página Web que mostra o resultado do teste de um Web service" class="margin-around b-all" height="345" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-tester2.png" width="248"></li>
      </ul>
    </li>
  </ol>

  <!-- ======================================================================================== -->

<h2><a name="samples">Amostras</a></h2>
  <p>Você pode abrir uma versão completa do bean sem estado Java EE do serviço Calculadora selecionando Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS) e navegar até Amostras > Web Services Java > Calculadora (EE6).</p>
<p>Um Serviço de Calculadora Maven e um Cliente de Calculadora Maven estão disponíveis em Amostras > Maven.</p>

  <h2 class="tutorial"><a name="Exercise_3"></a> Consumindo o Web Service</h2>
  <p class="tutorial">Agora que você implantou o Web service, precisará criar um cliente para utilizar o método <tt>add</tt> do Web service. 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.</p>

  <p class="notes"><b>Observação:</b> um tutorial mais avançado que se concentra nos clientes é <a href="../../../kb/docs/websvc/client.html">Desenvolvendo Clientes de Web Service JAX-WS</a>.</p>

  <div class="indent">
    <h3 class="tutorial"><a name="Exercise_3_1"></a>Cliente 1: Classe Java na Aplicação Java SE</h3>

    <p>Nesta seção, você cria uma aplicação Java padrão. O assistente usado para criar a aplicação também criará uma classe Java. Em seguida, você usa as ferramentas do IDE para criar um cliente e consumir o Web service que criou no início deste tutorial.</p>
    <ol>

      <li>Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS). Selecione Aplicação Java na categoria Java. Nomeie o projeto <tt>CalculatorWS_Client_Application</tt>. Deixe a opção Criar Classe Principal selecionada e aceite todas as outras definições default. Clique em Finalizar.</li>

      <li>Clique com o botão direito do mouse no nó <tt>CalculatorWS_Client_Application</tt> e selecione Novo > Cliente de Web Service. O assistente de Novo Cliente de Web Service será aberto. </li>

      <li>Selecione Projeto como o código-fonte WSDL. Clique em Procurar. Procure o Web service CalculatorWS no projeto CalculatorWSApplication. Depois de ter selecionado o Web service, clique em OK.<br> <img alt="Caixa de diálogo Web Services que mostra o serviço CalculatorWS" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>

      <li>Não selecione um nome de pacote. Deixe este campo vazio.<br> <img alt="Assistente Novo Cliente de Web Service que mostra o nome do pacote" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/javaclient-pkg.png"></li>
      <li>Deixe as outras definições como default e clique em Finalizar.
        <p>A janela Projetos exibirá o novo cliente de Web service, com um nó para o método <tt>add</tt> que você criou:</p>
      <br><img alt="Novo cliente Web service na aplicação Java exibido na janela Projetos" class="margin-around b-right b-top" height="294" src="../../../images_www/articles/72/websvc/jax-ws/ws-ref-in-client-project.png" width="311">            </li>
      <li>Clique duas vezes na classe principal para abri-la no Editor de Código-Fonte. Arraste o nó <tt>adicionar</tt> abaixo do método <tt>main()</tt>.<br><img alt="Arrastando e soltando a operação de adição no corpo da classe principal" class="margin-around b-all" height="186" src="../../../images_www/articles/72/websvc/jax-ws/dnd-add.png" width="527">
       <p> Agora você deverá ver o seguinte:</p>

        <pre class="examplecode">public static void main(String[] args) {
    // TODO code application logic here
}
private static int add(int i, int j) {
    org.me.calculator.CalculatorWS_Service service = new org.me.calculator.CalculatorWS_Service();
    org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
    return port.add(i, j);
}</pre>
        <p><b>Observação:</b> como alternativa, em vez de arrastar o nó <tt>adicionar</tt> , você pode clicar com o botão direito do mouse no editor e, em seguida, selecionar Inserir Código > Operação de Chamada a Web service.      </li>
      <li>No corpo do método <tt>main()</tt>, substitua o comentário TODO com o código que inicializa os valores de <tt>i</tt> e <tt>j</tt>, chama <tt>add()</tt> e mostra o resultado.
	  <pre class="examplecode">public static void main(String[] args) {<br>    int i = 3;<br>    int j = 4;<br>    int result = add(i, j);<br>    System.out.println(&quot;Result = &quot; + result);
}</pre></li>
      <li>Circunde o código do método <tt>main()</tt> com um bloco try/catch que imprime uma exceção.
	  <pre class="examplecode">public static void main(String[] args) {<br>    try {<br>        int i = 3;<br>        int j = 4;<br>        int result = add(i, j);<br>        System.out.println(&quot;Result = &quot; + result);<br>    } catch (Exception ex) {<br>        System.out.println(&quot;Exception: &quot; + ex);<br>    }
}</pre> 
      </li>
      <li>Clique com o botão direito do mouse no nó do projeto e selecione Executar.
        <p>A janela de Saída agora mostra a soma:</p>
        <pre class="examplecode">    compile:
    run:
    Result = 7
      BUILD SUCCESSFUL (total time: 1 second)</pre>
      </li>
    </ol>

    <h3><a name="Exercise_3_2"></a>Cliente 2: Servlet na Aplicação Web</h3>


    <p>Nesta seção, você cria uma nova aplicação Web e, depois disso, cria um servlet. Em seguida, usa o servlet para consumir o Web service que criou no início deste tutorial.
    <ol>

      <li> Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS). Na categoria Java Web, selecione Aplicação Web. Nomeie o projeto <tt>CalculatorWSServletClient</tt>. Clique em Próximo e, em seguida, em Finalizar.</li>

      <li>Clique com o botão direito do mouse no nó <tt>CalculatorWSServletClient</tt> e selecione Novo > Cliente de Web Service.

        <p>O assistente de Novo Cliente de Web Service será aberto.</p>
      </li>

      <li>Selecione Projeto como origem WSDL e clique em Procurar para abrir a caixa de diálogo Procurar Web Services.</li>
      <li>Selecione o web service CalculatorWS no projeto CalculatorWSApplication. Clique em OK para fechar a caixa de diálogo Procurar Web Services.<br> <img alt="Caixa de diálogo Web Services que mostra o serviço CalculatorWS" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>
      <li>Confirme se o nome do pacote está vazio no assistente de Novo Cliente de Web Service e deixe as outras definições com o valor padrão. Clique em Finalizar.

        <p>O nó Referências de Web Service na janela Projetos exibe a estrutura do cliente recém-criado, que inclui a operação <tt>add</tt> que você criou anteriormente neste tutorial.</p>
      </li>
      <li>Clique com o botão direito do mouse no nó do projeto <tt>CalculatorWSServletClient</tt> e selecione Novo > Servlet. Chame o servlet de <tt>ClientServlet</tt> e coloque-o em um pacote chamado <tt>org.me.calculator.client</tt>. Clique em Finalizar.
      <li>Para tornar o servlet o ponto de entrada da aplicação, clique com o botão direito do mouse no nó do projeto CalculatorWSServletClient e selecione Propriedades. Abra as propriedades de Executar e digite <tt>/ClientServlet</tt> no campo URL Relativo. Clique em OK.
      <li>Se houver ícones de erro em <tt>ClientServlet.java</tt>, clique com o botão direito do mouse no nó do projeto e selecione Limpar e Construir.
      
      <li>No método <tt>processRequest()</tt>, adicione algumas linhas vazias depois desta linha:
        <pre class="examplecode">    out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");</pre>
      </li>
      <li>No Editor de Código-Fonte, arraste a operação <tt>adicionar</tt> em qualquer lugar do corpo da classe <tt>ClientServlet</tt>. O método <tt>add()</tt> aparecerá ao final do código da classe.

        <p class="notes"><b>Observação:</b> como alternativa, em vez de arrastar o nó <tt>adicionar</tt> , você pode clicar com o botão direito do mouse no editor e, em seguida, selecionar Inserir Código > Operação de Chamada a Web service.</p> 
	  <pre class="examplecode">private int add(int i, int j) {<br>    org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();<br>    return port.add(i, j);
}</pre>
      </li>
      <li>Adicione o código que inicializa os valores de <tt>i</tt> e <tt>j</tt>, chama <tt>add()</tt> e imprime o resultado. O código adicionado está em <b>negrito</b>:
        
        <pre class="examplecode">protected void processRequest(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("&lt;html&gt;");
        out.println("&lt;head&gt;");
        out.println("&lt;title&gt;Servlet ClientServlet&lt;/title&gt;");
        out.println("&lt;/head&gt;");
        out.println("&lt;body&gt;");
        out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");

    <strong>    int i = 3;<br>        int j = 4;<br>        int result = add(i, j);<br>        out.println(&quot;Result = &quot; + result);</strong>

        out.println("&lt;/body&gt;");
        out.println("&lt;/html&gt;");
        
    } finally {            <br>        out.close();<br>    }<br>}</pre>
      </li>
      <li>Circunde o código adicionado com um bloco try/catch que imprime uma exceção. 
	  <pre class="examplecode">protected void processRequest(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("&lt;html&gt;");
        out.println("&lt;head&gt;");
        out.println("&lt;title&gt;Servlet ClientServlet&lt;/title&gt;");
        out.println("&lt;/head&gt;");
        out.println("&lt;body&gt;");
        out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");
        <strong>try {</strong>
            int i = 3;<br>            int j = 4;<br>            int result = add(i, j);<br>            out.println(&quot;Result = &quot; + result);
        <strong>} catch (Exception ex) {
            out.println(&quot;Exception: &quot; + ex);
        }</strong>
        out.println("&lt;/body&gt;");
        out.println("&lt;/html&gt;");
        
    } finally {            <br>        out.close();<br>    }<br>}</pre>
      </li>
      <li>Clique com o botão direito do mouse no nó do projeto e selecione Executar. 
        <p>O servidor será iniciado, a aplicação será construída e implantada e o browser será aberto, exibindo o resultado do cálculo, como mostrado abaixo: <br><img alt="Novo cliente de Web service no servlet exibido na janela Projetos" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-webclient.png">        </li>
    </ol>

    <h3><a name="Exercise_3_3"></a>Cliente 3: Página JSP na Aplicação Web</h3>
    <p>Nesta seção, você cria uma nova aplicação Web e, em seguida, consome o Web service na página JSP default que o assistente Aplicação Web cria.</p>
    <p class="notes"><b>Observação:</b> se você quiser executar um cliente de aplicação Web JSP em Oracle WebLogic, consulte <a href="../web/jsf-jpa-weblogic.html">Executando uma Aplicação Java Server Faces 2.0 em WebLogic</a>.</p>
    <ol>
      <li> Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e no Windows, ⌘-Shift-N no MacOS). Na categoria Java Web, selecione Aplicação Web. Nomeie o projeto <tt>CalculatorWSJSPClient</tt>. Clique em Próximo e, em seguida, em Finalizar.</li>
      <li>Expanda o nó Páginas Web sob o nó do projeto e exclua <tt>index.html</tt>.</li>
    <li>Clique com o botão direito do mouse no nó <tt>Páginas Web</tt> e escolha Novo > JSP no menu pop-up.
      <p>Se JSP não estiver disponível no menu pop-up, escolha Novo > Outro e selecione JSP na categoria Web do assistente de Novo Arquivo.</p></li>
      <li>Digite <strong>index</strong> como nome do arquivo JSP no assistente de Novo Arquivo. Clique em Finalizar.</li>
      <li>Clique com o botão direito do mouse no nó <tt>CalculatorWSJSPClient</tt> e selecione Novo > Cliente de Web service.</li>

      <li>Selecione Projeto como o código-fonte WSDL. Clique em Procurar. Procure o Web service CalculatorWS no projeto CalculatorWSApplication. Depois de ter selecionado o Web service, clique em OK.<br> <img alt="Caixa de diálogo Web Services que mostra o serviço CalculatorWS" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>
      <li>Não selecione um nome de pacote. Deixe este campo vazio.</li>
      <li>Deixe as outras definições como default e clique em Finalizar.

        <p>A janela Projetos exibe o novo cliente de web service, como mostrado abaixo:</p>

      <img alt="Novo cliente de Web service no servlet exibido na janela Projetos" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/ws-ref-in-jsp-client.png"></li>

      <li>No nó Referências de Web Services, expanda o nó que representa o Web service. A operação <tt>adicionar</tt>, que você chamará do cliente, agora está exposta.</li>
      
      <li>Arraste a operação <tt>adicionar</tt> para a página <tt>index.jsp</tt> do cliente e solte-a abaixo das tags H1. O código para chamar a operação de serviço agora é gerado na página <tt>index.jsp</tt>, como você pode ver aqui:

        <pre class="examplecode">&lt;%
try {
    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);
    out.println("Result = "+result);
} catch (Exception ex) {
    // TODO handle custom exceptions here
}
%&gt;</pre>

        <p>Altere o valor de <tt>i</tt> e <tt>j</tt> de 0 por outros inteiros, como 3 e 4. Substitua a linha TODO comentada no bloco catch por <tt>out.println("exception" + ex);</tt>.</p>
      </li>


      <li>Clique com o botão direito do mouse no nó do projeto e selecione Executar.
        <p>O servidor será iniciado, caso já não esteja em execução. A aplicação será construída e implantada e o browser será aberto, exibindo o resultado do cálculo:</p>

      <img alt="Página JSP que mostra o resultado" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/jax-ws-project-jsp-result.png"></li>
    </ol>
</div>
  <br>
  <div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20JAX-WS%20Services%20in%20NetBeans%20IDE">Enviar Feedback neste Tutorial</a></div>
  <br style="clear:both;">
  <!-- ======================================================================================= -->
  <h2><a name="seealso"></a>Consulte Também</h2>
  <p>Para obter mais informações sobre o uso do NetBeans IDE para desenvolver aplicações Java EE, consulte os seguintes recursos:
  </p>
  <ul>
    
    <li><a href="./client.html">Desenvolvendo Clientes de Web Service JAX-WS</a></li>

    <li><a href="./rest.html">Introdução ao RESTful Web Services</a></li>
    <li><a href="./wsit.html">Interoperabilidade Avançada de Web Service</a></li>
    <li><a href="../../../kb/trails/web.html">Trilha do Aprendizado de Web services</a></li>

  </ul>
  <p>Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos das funcionalidades de desenvolvimento Java EE do NetBeans IDE, <a href="../../../community/lists/top.html">inscreva-se na lista de notícias nbj2ee@netbeans.org</a>.</p>
</body>
