@WebService

Recebi a missão de desenvolver e disponibilizar alguns serviços via web, andei pesquisando e achei muita coisa, muita mesmo, mas parace que em todos os tutoriais e exemplo se fazia necessário a complexidade, enfim, o pessoal gosta de complicar.

O exemplo é simples, vamos recebe um texto e retorna o mesmo totalmente em maíusculo, para isso usarei algumas annotations do Java 6 e efetuaremos o deploy no glassfish.

Necessidade:

- Servidor de aplicações Web JEE, exemplo Glassfish ou JBoss.
- Projeto web criado na sua IDE favorita(eclipse/NetBeans).
- Ter a noção de que o servidor JEE fará ao deplay da sua aplicação.

Passo 1:

Criar a interface com os serviços que estaremos disponibilizando:

@javax.jws.WebService
public interface ITextos {
public String getTextoMaiusculo (String texto);
}

Passo 2:

Criar a classe implementadora, que realmente efetuará a transformação do texto.

@javax.jws.WebService
public class TextosImpl implements ITextos {

@javax.jws.WebMethod(operationName = “converteParaMaiusculo”)
public String getTextoMaiusculo(@javax.jws.WebParam(name = “texto”) String texto) {

return texto.toUpperCase();
}
}

Deve estar se perguntando o que são estas anotações, explico:

@WebService: Usada para especificar que a classe e um serviço web ou que a interface define um web service. Parametros aceitaveis:

@WebMethod(operationName=”salvar”): Quando utilizado deixa bem claro que o método envolvido pela anotação será um serviço. O parametro operationName representa o nome da operação.

@javax.jws.WebParam: Usada para definir o nome do paramentro, sem esta anotação os parametros serão renomeados para o padrão args0, args1…argsn, dificultando a vida de quem esta criando o cliente para consumir o Web Service, visto que é mais prático ler nomeDoUsuario do que args3.

Passo 3:

Efetuar o deploy(run):

- Eclispe: clique com o botão direito sobre o nome do projeto -> Run as -> Run on Server. Escolha o servidor JEE.

- NetBeans: Clique com o botão direito sobre o nome do projeto -> Run.

Verificar se o serviço que estamos disponibilizando esta funcionando:

Em meus testes estou usando um servidor local com a url: http://localhost:8080/YRossWebService e a url para o web service ficou http://localhost:8080/YRossWebService/TextosImplService, observe que o nome da classe TextosImpl que representa nosso serviço, foi adicionado de Service. Ao acessar esta url o container processará e no browser obteremos algo como:

Web Services

Endpoint Information
Service Name: {http://webservices.yross.com/}TextosImplService
Port Name: {http://webservices.yross.com/}TextosImplPort
Address: /TextosImplService
WSDL: /TextosImplService?wsdl
Implementation class: com.yross.webservices.TextosImpl

Oberverve que um WSDL foi criado para que os clientes de web services possam utiliza-lo para criar sua aplicação de consumo. Em outro post vou criar uma cliente baseado neste web service. Ao acessar esta url http://localhost:8080/YRossWebService/TextosImplService?wsdl o wsdl é exposto como descrito abaixo.

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<definitions xmlns:wsu=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd” xmlns:soap=”http://schemas.xmlsoap.org/wsdl/soap/” xmlns:tns=”http://webservices.yross.com/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns=”http://schemas.xmlsoap.org/wsdl/” targetNamespace=”http://webservices.yross.com/” name=”TextosImplService”>

    <types>
       <xsd:schema>
           <xsd:import namespace=”http://webservices.yross.com/” schemaLocation=”http://localhost:8080/YRossWebService/TextosImplService?xsd=1” />
       </xsd:schema>
    </types>

    <message name=”converteParaMaiusculo”>
        <part name=”parameters” element=”tns:converteParaMaiusculo” />
    </message>
    <message name=”converteParaMaiusculoResponse”>
        <part name=”parameters” element=”tns:converteParaMaiusculoResponse” />
    </message>

    <portType name=”TextosImpl”>
        <operation name=”converteParaMaiusculo”>
            <input message=”tns:converteParaMaiusculo” />
            <output message=”tns:converteParaMaiusculoResponse” />
        </operation>
    </portType>

    <binding name=”TextosImplPortBinding” type=”tns:TextosImpl”>
        <soap:binding transport=”http://schemas.xmlsoap.org/soap/http” style=”document” />
           <operation name=”converteParaMaiusculo”>
             <soap:operation soapAction=”" />
             <input>
                 <soap:body use=”literal” />
             </input>
             <output>
                <soap:body use=”literal” />
             </output>
           </operation>
</binding>

    <service name=”TextosImplService”>
        <port name=”TextosImplPort” binding=”tns:TextosImplPortBinding”>
        <soap:address location=”http://localhost:8080/YRossWebService/TextosImplService” />
        </port>
    </service>
</definitions>

Agora basta disponibilizar o endereço do wsdl de seu serviço para os clientes. Este é um exemplo bem superficial que tem como objetivo a iniciação com Web Services.

3 comentários até agora

  1. Jorge on

    Vc já postou o Client ?
    obrigado

  2. yross on

    Amigos estou desenvolvendo uma npova versão deste tutorial, neste tentarei explicar o serviço e o cliente.

  3. Extenze on

    Wow! what an idea ! What a concept ! Beautiful .. Amazing …


Leave a reply