Bonjour à tous,
Et oui, encore un billet technique, désolé à mes lecteurs non-geeks ;-)
Aujourd'hui, en effet, je me suis pris le chou avec CXF. J'espère que ça pourra être utile à d'autres ;-)
Le contexte : JAX-RS et CXF
À tort ou à raison, on utilise CXF comme implémentation JAX-RS. JAX-RS, c'est une spécification Java pour pouvoir faire du REST. CXF utilise Jettison comme sérialiseur JSON. Or, Jettison s'appuie sur JAXB[1], ce qui est bien pratique pour le développeur, mais tout pourri pour ce qui est du JSON produit[2].
Jackson : le sérialiseur JSON idéal
C'est là qu'intervient jackson. Je crois que c'est aujourd'hui le meilleur sérialiseur JSON pour Java. Et en plus, il y a plein de docs pour le faire fonctionner avec JAX-RS. Sauf qu'en fait, ça marche pas[3].
La solution avec Spring
Voici la solution trouvée, dans un fichier de contexte Spring :
<jaxrs:server id="monBeauServiceRest" address="/service"> <jaxrs:serviceBeans> <ref bean="monBeanRest" /> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="jsonProvider"/> </jaxrs:providers> </jaxrs:server> <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"> </bean>