Webservices com Grails

Grails é um ótimo framework para aplicações web em Groovy (linguagem dinâmica para Java). Seu foco é alta produtividade e simples configuração o que, na minha humilde opinião, vêm fazendo com tal maestria que merece um #epicwin.

Mas vamos ao que interessa: como montar um Webservice com o Grails.

1. Instalando o Plugin

Usaremos o xfire como o nosso framework para SOAP. Primeiro, instale o plugin xfire para sua aplicação Grails, com o seguinte comando:

grails install-plugin xfire

Mais fácil, impossível.

2. Criando o service inicial

Na pasta da aplicação, digite o seguinte comando pelo terminal para criar um service do Grails (usarei o nome “Webservice” só para fins de aprendizado):

grails create-service Webservice

Pronto, o grails agora criou um service na pasta grails-app/services/. Agora abra o service criado em seu editor de texto favorito e insira a seguinte linha em cima (ou substitua, como preferir) da linha static transational = true:

static expose=['xfire']

Com isso o seu service já está pronto para ser consumido. Execute sua aplicação (comando grails run-app) e o wsdl do seu webservice poderá ser acessado pela url (caso sua aplicação esteja em localhost:8080/Exemplo):

http://localhost:8080/Exemplo/services/webservice?wsdl

Uma dica é usar o soapUI para testar o seu webservice.

3. Listando Domain Classes

Agora que o seu webservice já está up and running, vamos criar um novo serviço para, por exemplo, listar os registros de uma domain class do grails. Suponhamos que exista uma domain class chamada Livro e outra chamada Autor. Um Autor possui vários livros (hasMany, no Grails) e um Livro possui um Autor (atributo do tipo Autor). Para evitar referências circulares na conversão das domain classes para XML, adicione a seguinte linha acima dos atributos à(s) domain class(es) com a ligação do tipo “belongs to” (no nosso caso, Livro):

static xmlTransients = ['autor']

Onde [‘autor’] é o nome do atributo do tipo Autor da domain class em questão.

Voltando ao WebserviceService, vamos acrescentar o método listarLivros():

Livro[] listarLivros() {
    Livro.list() as Livro[]
}
Acessando esse serviço, este é um exemplo do que ele irá retornar:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <ns1:listarLivrosResponse xmlns:ns1="http://exemplo">
            <ns1:out>
                <ns1:Livro>
                    <id xmlns="http://exemplo">1</id>
                    <nome xmlns="http://exemplo">Senhor dos Aneis</nome>
                    <version xmlns="http://exemplo">0</version>
                </ns1:Livro>
                <ns1:Livro>
                    <id xmlns="http://exemplo">2</id>
                    <nome xmlns="http://exemplo">Hobbit</nome>
                    <version xmlns="http://exemplo">0</version>
                </ns1:Livro>
            </ns1:out>
        </ns1:listarLivrosResponse>
    </soap:Body>
</soap:Envelope>

A conversão da domain class para XML foi feita pelo Grails de forma automágica.

Isso conclui um webservice básico em Grails. Simples, né? :)

Categorias: Grails, Java

Comentários (1)

  • Pedro Henrique

    Muito obrigado cara, me ajudou bastante, vou postar alguma coisa no meu blog também.