dimanche 9 août 2009

Grails, Groovy, xFire & SoapUI : créer un web service et le tester en 22 lignes de codes, 7 commandes et 5 minutes

Préambule : Avant de commencer, s’agissant de publier des services, je rappelle que je reste adepte du concept Contrat-first. Mais, ce tutoriel est destiné à montrer la puissance de l’approche Grails. Il doit être affiné pour suivre l’approche contract-first. Qu'il s'agisse d'une solution java développée 'from scratch' ou basée sur du 'java software' payé en $$ ou sur du .net basée sur Biztalk : l'essentiel c'est que le contrat soit défini dès le début

Question : comment créer un web service en exposant la liste à partir d’une base de données

Contexte : confronté, sur un nouveau projet, à une demande du client qui souhaite rapidement : apprendre à consommer des web services, dans un projet classique JSF/Spring/Hibernate . L’idée est d’utiliser Spring webservice template, mais, Il a fallu fournir des web services rapidement, pour les consommer

Réponse : le simple c’est d’utiliser Grails (yes it's a java software from Spring cretors, based on Groovy : a dynamique java software from the Spring source ...)

Des webservices en moins de 5 minutes, 6 commandes et 22 lignes de codes …

En prime : les écrans de gestion de l’entité cible dans la base de donnée

Etape 1: installer Grails

http://www.objis.com/formation-java/tutoriel-grails-installation.html

Etape 2 : créer une application

(Commande 1)>grails create-app webservice-xfire

(Commande 2)>cd webservice-xfire

(Commande 3)>grails create-domain-class com.oxia.att.grails.Role

Ajouter ce code (en somme du Plain old Groovy objects, dit POGO)

1:  package com.oxia.att.grails
2: class Role {
3: String name
4: static constraints = {
5: name(blank: false, size: 1..20)
6: }
7: public String toString() {
8: return name
9: }
10: }


(commande 4)>grails create-controller com.oxia.att.grails.Role



Etape 2 : installer le plugin xFire



http://www.grails.org/plugin/xfire



(commande 5)> grails install-plugin xfire


Etape 3 : générer les bases du service en relation avec le POGO Role

(commande 6)> grails create-service com.oxia.att.grails.Role

Etape 4 : ajouter un peu de code Groovy pour exposer le métier

1:  class RoleService {
2: static expose=['xfire']
3: def serviceMethod(Role dc) {
4: return true
5: }
6: Role[] getRoles(){ Role.list() as Role[] }
7: }

clip_image001[4]

Etape 5 : lancer

(commande 7)> grails run-app
http://localhost:8080/webservice-xfire/services/role?wsdl
clip_image003[4] Avant de tester le web service : ajouter au moins 1 Role (le fameux admin…) ( les écrans d’administration ont été générés aussi) clip_image004[4]

Etape 6 : tester avec SoapUI

Créer un projet avec SOAP UT à partir du WSDL

clip_image005[4]

SOAPUI va créer ce projet

clip_image006[4]

Lancer le teste

clip_image008[4]

Le résultat n’est pas « orienté » Contrat-first

Mais … avec du XPATH on pourra se débrouiller !

Avouons qu’il faut travailler encore le CONTRAT

Etape 7: statistique

Code utile : 22 lignes de codes (les tests unitaires sont aussi utiles mains non comptabilisées dans ce cas)

 +----------------------+-------+-------+
| Name | Files | LOC |
+----------------------+-------+-------+
| Controllers | 1 | 4 |
| Domain Classes | 1 | 10 |
| Services | 1 | 8 |
| Unit Tests | 3 | 36 |
+----------------------+-------+-------+
| Totals | 6 | 58 |
( sans formatage de texte )

Etape 8 : consommer le service

Utiliser Spring Web service template

Mais, ceci est un autre sujet

--------------------------------------------------

autres sujets Grails

-- Groovy & Grails : L’instabilité en vue du coté JRuby, une opportunité de plus pour Groovy & Grails

-- Groovy et Grails dans le giron de SpringSource : Un bel avenir pour les langage dynamique
--------------------------------------------------

autres sujets à venir

- le concept Java 3G : Grails, Groovy et Google appengine

- les plugins Grails


0 commentaires :

Enregistrer un commentaire

Architecte SOA & Professionnel Open Source Headline Animator

 
Khaled BEN DRISS
Cloud Computing, SOA et Web 2.0 : Des sujets techniques sur SOA et l'Open Source : de Java & .Net, PHP5, Symfony, à SaaS / PaaS en passant par Azure, google appengine, le BPM, la Modélisation et d'autres sujets du coté du serveur et cloud computing.