JAXB JSON extends class

JAXB JSON extends class - Java - Programmation

Marsh Posté le 22-04-2013 à 17:02:42    

Bonjour,
 
je recontre une probleme plutot etrange.
Je suis entrain de dev un Jeu Mobile et je m'occupe de la partie serveur, WebService avec Jersey.
Pour repondre a mon client j'utilise du JSON avec JAXB voici mon modele de reponse
 
Une class qui contient un code est la reponse en fonction de la demande

Code :
  1. @XmlRootElement
  2. public class Response {
  3. private int code;
  4. @XmlElement(name="content" )
  5. private AbsResponse rAbs;
  6. }


 
Une class vide

Code :
  1. @XmlRootElement
  2. public abstract class AbsResponse {
  3. }


 
Une class qui correspond a ma reponse specifique

Code :
  1. @XmlRootElement
  2. public class ResponseLogin extends AbsResponse {
  3. public ResponseLogin() {
  4. }
  5. }


 
J'utilise la class vide car j'ai plein de réponse du type ResponseLogin , ResponseGame etc...
 
1 - Alors le problème est que avec le POJO d'activer le json produit est nickel pas de soucis mais sans (juste JAXB) ma AbsResponse est toujours vide.
Je veux utiliser JAXB car avec POJO je n'ai pas trouver comment exclure des variables d'une class lors de la production du json.
 
2 - Existe-t-il une autre façon de faire avec mes réponses pour éviter la class vide.
 
 
Si cela n'est pas clair dit le moi.
 
Merci


Message édité par kingstone59 le 22-04-2013 à 17:03:21
Reply

Marsh Posté le 22-04-2013 à 17:02:42   

Reply

Marsh Posté le 24-04-2013 à 15:54:01    

C'est pas clair :D
 
Je comprend pas "avec le POJO d'activer" et "Je veux utiliser JAXB car avec POJO".
 
En dehors de ça :
- tu peux virer le @XmlRootElement de ta classe abstraite ;
- pour exclure des propriétés de classe de la production JAXB, on les annote avec @XmlTransient ;
- ça se fait généralement sur le getter plutôt que la propriété, j'ai déjà rencontré des bugs bizarres sans ça ;
- d'ailleurs, t'as bien les getters/setters pour les champs en question ?
- comment tu déploie ton module jersey ? Tu déclares bien le support JSon pour Jersey ? Serveur d'application ? Si dans ton classpath tu as des libs qui viennent en conflit avec ce qu'embarque Jersey, ça peut tiquer aussi.
 

Reply

Marsh Posté le 24-04-2013 à 16:33:09    

Merci pour ta réponse.
 
Je vais tenter de mieux détaillé les points encore flou.
 
En fait je me suis en emmêlé les pinceaux.
Donc avec POJO (com.sun.jersey.api.json.POJOMappingFeature) Jersey utilise la lib Jackson.  <- @XmlTransient ne marché pas (mais va marché grave a toi)
Et donc sans POJO, c'est du JAXB. <-  ma AbsResponse est toujours vide
J'espere avoir compris cette fois.
 
pour te répondre :
 - tu peux virer le @XmlRootElement de ta classe abstraite ;
Cela ne resoud pas mon probleme avec JAXB
 
- pour exclure des propriétés de classe de la production JAXB, on les annote avec @XmlTransient ;
C’était déjà le cas mais cela ne marché pas
- ça se fait généralement sur le getter plutôt que la propriété, j'ai déjà rencontré des bugs bizarres sans ça ;  
Merci je n'y avait pas pensé mais ça marche nickel sur le getter !!!!!!!!! ma variable est bien exclu du JSon
 
- d'ailleurs, t'as bien les getters/setters pour les champs en question ?  
Oui
 
- comment tu déploie ton module jersey ? Tu déclares bien le support JSon pour Jersey ? Serveur d'application ? Si dans ton classpath tu as des libs qui viennent en conflit avec ce qu'embarque Jersey, ça peut tiquer aussi.  
Alors mon jersey tourne sur Jetty (google app engine).
Je ne sais pas ou déclares le support JSon pour Jersey. Mais j'ai bien du JSon de produit pas de soucis.
Je ne pense pas avoir de conflit de libs, j'en ai déjà bien chier pour tout faire marcher
 
 
Déjà un grand problème de résolut grâce au @XmlTransient sur getter !! Merci beaucoup.
 
Mais pour mon problème avec JAXB qui arrive pas a produire le JSon voulu je ne trouve toujours pas.

Reply

Marsh Posté le 24-04-2013 à 17:42:52    

kingstone59 a écrit :


Je ne sais pas ou déclares le support JSon pour Jersey. Mais j'ai bien du JSon de produit pas de soucis.
Je ne pense pas avoir de conflit de libs, j'en ai déjà bien chier pour tout faire marcher


 
Il te faut un certain nombre de libs en plus de jersey-core pour que le support JAXB fonctionne, voir ici : https://jersey.java.net/nonav/docum [...] ml#d4e1718
 
 

Reply

Marsh Posté le 29-04-2013 à 10:58:57    

Juste stax-api-1.0-2.jar n’était pas présent mais cela n'aide pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed