Cliente de web service JAX-WS

JAX-WS, de acordo com a Wikipedia, é definido como “acrônimo de Java API for XML Web Services, ou em português API Java para Serviços Web XML, é uma API Java para criação de web services. Ela é parte da plataforma Java EE da Oracle. Assim como as outras APIs Java EE, JAX-WS usa anotações, introduzidas na versão Java SE 5, para simplificar o desenvolvimento e implantação de clientes web service e endpoints.”

Para exemplificar um cliente de web service precisamos, antes de tudo, da parte que fica no servidor.

Os exemplos a seguir foram testados com as seguintes versões de programa:
– jboss-eap-6.1
– JDK 7_0_10
– Eclipse Juno

Para o web service usei o seguinte código:

 
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;

@Stateless
@WebService
public class WSTeste {

    @WebMethod
    public String dizerOla(String nome) {
        return "Ola, " + nome;
    }	
}

O Deploy no JBoss pode ser feito da seguinte forma:

Botão direito no Projeto, escolha Export/jar File/, de um nome para o jar de wsteste.jar e coloque o jar na pasta /deployments do JBoss

Em um outro post está mais didático como fazer deploy no JBoss6. Veja-o neste link Aqui.

Após o deploy o JBoss exibe algumas informações na console (informações que também podem ser acessadas na console web do JBoss).

INFO  [org.jboss.ws.cxf.metadata] (MSC service thread 1-2) JBWS024061: Adding service endpoint metadata: id=WSTeste
 address=http://localhost:8080/wsteste/WSTeste
 implementor=br.teste.WSTeste
 serviceName={http://teste.br/}WSTesteService
 portName={http://teste.br/}WSTestePort
 annotationWsdlLocation=null
 wsdlLocationOverride=null
 mtomEnabled=false

O descritor do web service (WSDL) pode ser acessado da seguinte forma:

    http://localhost:8080/wsteste/WSTeste?WSDL

    É o conteúdo da informação address, da imagem acima.

Tendo-se o endereço do WSDL podemos utiliar um utilitário da JDK para gerar um ‘jar’ que possui classes clientes do web service.

  C:\jdk1.7.0_10\bin>wsimport http://localhost:8080/wsteste/WSTeste?WSDL -clientjar wstesteClient.jar

  parsing WSDL...
  Downloading the WSDL and associated metadata
 
  Generation code...
  Compiling code...
  
  Archiving the generated artifactis in to .\wstesteClient.jar.

Usar o wsimport com a opção -client gerou realmente o jar porém, conforme a figura seguinte, houve problemas com o empacotamento das classes.
O jar é gerado porém as classes dentro ficam abaixo do ‘package default’.

gerando_jar_errado

Então, para contornar o problema (que talvez seja específico dessa versão da JDK), fiz da seguinte forma:

cd c:\jdk1.7.0_10\bin
      
mkdir novodir
    
wsimport http://localhost:8080/wsteste/WSTeste?WSDL -d novodir
  
jar cvf wstesteCliente.jar -C novodir/ .
    
    
  
Agora sim, importando o jar wstestecliente no Eclipse não apresenta problemas no empacotament.
  
jar_gerado_corretamente
      

É claro que poderia ser utilizado Ant, Maven, etc, para facilitar a geração do cliente de web service mas a idéia central aqui é 
usar as ferramentas básicas.

O JBoss também possui um utilitário que gera o cliente de web service, chama-se wsconsume e talvez não apresente o problema de empacotamento que encontrei. 
 
Com o jar gerado, pode-se finalmente criar um projeto no Eclipse para acessar o web service.  

import br.teste.WSTeste;
import br.teste.WSTesteService;

public class Main {

   public static void main(String[] args) {
      
      WSTeste ws = new WSTesteService().getWSTestePort();

      System.out.println(ws.dizerOla("Sr. X"));		
   }
}

Links:
http://pt.wikipedia.org/wiki/JAX-WS
http://docs.oracle.com/javaee/5/tutorial/doc/bnayn.html
http://docs.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html
https://docs.jboss.org/author/display/AS72/Java+API+for+XML+Web+Services+(JAX-WS)
http://edermag.blogspot.com.br/2010/09/consumir-webservice-com-autenticacao.html
https://jax-ws.java.net/2.2.6-2/docs/ch04.html

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s