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>
