Montée de version JDK8 : un RESTeasy récalcitrant

java8

Dans le cadre d'une montée de version d'un projet Spring en JDK6 vers JDK8, nous avons dû faire le ménage dans nos librairies.

Pour la plupart des librairies, la migration se fait en douceur. Les choses se compliquent lorsque l'on arrive à Spring et sa myriade de modules. En effet La version 3.0.5.RELEASE de Spring que nous utilisions jusqu'à présent n'était pas compatible avec les nouvelles fonctionnalités JDK8. La compatibilité JDK8 ne commençant qu'à partir de la 4.0, nous sommes donc passés à la dernière version de l'époque : la 4.1.7.RELEASE.

JAX-RS web service REST avec Spring (implémentation RestEasy)

L'objet de ce billet: Illustrer avec un exemple assez complet la mise en pratique du web service REST (JAX-RS) s'appuyant sur l'implémentation RestEasy de JBoss avec Spring 2.5.
L'exemple repose sur les briques (api) suivantes. Notez bien la version lorsqu'elle est mentionnée.

  • RestEasy: L'implémentation Jboss de jax-rs (JSR 311),
  • Spring 2.5 et les annotations,
  • Hibernate pour la partie persistence
  • L'api Dozer v4.0 pour les DTO (Data Transfert Objetc) ou VO((Value Object).
  • Junit 4.4,
  • HttpUnit,
  • XMLUnit.

Nota:La version Dozer 4.0 a renommé complètement ses packages. Certains tutos sur le web sont donc caduques.
C'est à la fin de l'étape 5 que nous détaillons l'emploi de l'api Dozer.

Quelques repères:

REST (Representational State Transfer) développé par Roy Fielding qui est l’un des fondateurs du protocol HTTP.
JSR 311 est la spec JAX-RS: Java API for RESTful Web Service. Finalisée en mars 2008.

Les CINQ principes de REST

  • P1: Tout est ressource, un identifiant unique à chaque ressource (http://localhost:8888/clients/2 pointe sur le client ayant id=2),
  • P2: Utiliser les méthodes HTTP (HEAD/GET/POST/PUT/DELETE). Et les erreurs standards HTTP,
  • P3: Les échanges avec plusieurs représentations ( xml,(x)html, json,..),
  • P4: Échanges sans état (stateless),
  • P5: Lier les ressources entre elles.

PRÉ-REQUIS: Java5.