Rss Feed

Apache CXF et Hibernate hbm2java

L’utilisation de Apache CXF/JAX-RS pour la création de services REST passe par l’ajout d’annotations dans vos POJOs ce qui peut être contraignant quand ceux-ci sont générés depuis vos fichiers hbm via hbm2java. Heureusement il existe une solution à ce problème via l’utilisation de freemarker. Freemarker est une librairie de génération de template utilisée par hbm2java pour transformer les xml de mapping (.hbm) en POJOs java. Prenons par exemple l’annotation @XmlRootElement qui doit précéder tous les pojos que jax-rs va transformer en XML :

Dans votre target ANT hbm2java ajouter templatepath=“resources/META-INF/pojo_templates/“ avec pojo_templates le répertoire qui contiendra les templates freemarker modifiées.

Dans  resources/META-INF/pojo_templates/ créer un fichier ‘PojoTypeDeclaration.ftl’ avec le contenu suivant :

<#if pojo.hasMetaAttribute("xmlrootelement")>

import javax.xml.bind.annotation.XmlRootElement;

</#if>

/**

${pojo.getClassJavaDoc(pojo.getDeclarationName() + " generated by hbm2java", 0)}

*/

<#include "Ejb3TypeDeclaration.ftl"/>

<#if pojo.hasMetaAttribute("xmlrootelement")>

@XmlRootElement(name="${pojo.getMetaAsString("xmlrootelement")}")

</#if>

${pojo.getClassModifiers()} ${pojo.getDeclarationType()} ${pojo.getDeclarationName()} ${pojo.getExtendsDeclaration()} ${pojo.getImplementsDeclaration()}

Il suffit alors d’ajouter dans votre fichier .hbm un meta attribute indiquant le nom du POJO. Exemple :

<hibernate-mapping package=“com.pojos”>

<class name=“MaClass” table=“ma”_table>

<meta attribute="xmlrootelement">MaClass</meta>

...

Le POJO généré sera alors de la forme :

import javax.xml.bind.annotation.XmlRootElement;

/**

* MaClass generated by hbm2java

*/

@XmlRootElement(name=“MaClass”)

public class MaClass  implements java.io.Serializable { ... }


On peut biensur appliquer ce principe à d’autres annotations (XmlSeeAlso …) et à d’autres frameworks.

Partager :
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • LinkedIn
  • Technorati
  • Twitter

Aucun d'article en relation

Laisser un commentaire

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word