2017-06-23 1 views
-2

Comment convertir objet java à l'aide xml JAXB pour obtenir le code XML suivant:Comment convertir les objets Java à l'élément XML attributs à l'aide JAXB

<Case> 
    <Version>1.0</Version> 
    <Code>457123</Code> 
    <Meta uc=\"Sample\" pip=\"116.0.1.1\" lot=\"P\"/> 
</Case> 

Il y a beaucoup de réponses sur la façon d'obtenir XML. J'ai traversé tous ceux-là. Mais ma question est comment obtenir le XML comme ce que j'ai montré. Il contient une balise à fermeture automatique qui contient même des attributs. J'utilise IDE Eclipse. S'il vous plaît suggérer une méthode.

Ceci est ma classe de cas:

import auth.Res.Meta; 

@XmlRootElement (name="Case") 

public class Test { 

private Meta mt; 
private String version; 
private String code; 

@XmlRootElement 
public class Meta { 

    @XmlAttribute 
    private String uc; 

    @XmlAttribute 
    private String pip; 

    public String getUc() { 
     return uc; 
    } 

    public void setUc(String uc) { 
     this.uc = uc; 
    } 

    public String getPip() { 
     return pip; 
    } 

    public void setPip(String pip) { 
     this.pip = pip; 
    } 
} 

public Meta getMt() { 
    return mt; 
} 

public void setMt(Meta mt) { 
    this.mt = mt; 
} 

public String getVersion() { 
    return version; 
} 

public void setVersion(String version) { 
    this.version = version; 
} 

public String getCode() { 
    return code; 
} 

public void setCode(String code) { 
    this.code = code; 
} 
} 

Solution:

Je l'ai résolu en créant classe séparée pour Meta comme suggéré par LazerBanana dans la première réponse.

+4

s'il vous plaît faire quelques recherches, il y a au moins 20 réponses dans la pile à propos de [marshaling java xml] (https://stackoverflow.com/questions/26797838/convert-java-object-using-jaxb-to- xml-and-vice-marshal-and-unmarshal) – LazerBanana

+1

Copie possible de [convertir un objet java en utilisant jaxb en xml et vice versa (marshal et unmarshal)] (https://stackoverflow.com/questions/26797838/convert- java-object-using-jaxb-à-xml-et-vice-marshal-et-unmarshal) – LazerBanana

+0

oui .il y a beaucoup de réponses. J'ai traversé tous ceux-là. Mais ma question est de savoir comment obtenir le xml comme ce que j'ai montré. Il contient une balise à fermeture automatique qui contient des attributs. – Leeza

Répondre

1

Voici à quoi devrait ressembler votre classe Meta.

public class Meta { 

    private String uc; 
    private String pip; 
    private String lot; 

    public String getUc() { 
     return uc; 
    } 

    @XmlAttribute 
    public void setUc(String uc) { 
     this.uc = uc; 
    } 

    public String getPip() { 
     return pip; 
    } 

    @XmlAttribute 
    public void setPip(String pip) { 
     this.pip = pip; 
    } 

    public String getLot() { 
     return lot; 
    } 

    @XmlAttribute 
    public void setLot(String lot) { 
     this.lot = lot; 
    } 
} 

ceci est votre classe de cas qui est l'élément racine

@XmlRootElement 
public class Case { 

    private int version; 
    private String code; 
    private String id; 
    private Meta meta; 

    public int getVersion() { 
     return version; 
    } 

    @XmlElement 
    public void setVersion(int version) { 
     this.version = version; 
    } 

    public String getCode() { 
     return code; 
    } 

    @XmlElement 
    public void setCode(String code) { 
     this.code = code; 
    } 

    public String getId() { 
     return id; 
    } 

    @XmlElement 
    public void setId(String id) { 
     this.id = id; 
    } 

    public Meta getMeta() { 
     return meta; 
    } 

    @XmlElement 
    public void setMeta(Meta meta) { 
     this.meta = meta; 
    } 
} 

Et c'est le bit de marshaling à la console et au fichier, il vous voulez.

public class Main { 

    public static void main(String... args) { 

     Case fcase = new Case(); 
     Meta meta = new Meta(); 

     meta.setLot("asd"); 
     meta.setPip("sdafa"); 
     meta.setUc("asgd4"); 

     fcase.setMeta(meta); 
     fcase.setVersion(1); 
     fcase.setId("sah34"); 
     fcase.setCode("code34"); 

     try { 

//   File file = new File("C:\\file.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(Case.class, Meta.class); 
      Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

      // output pretty printed 
      jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

//   jaxbMarshaller.marshal(fcase, file); 
      jaxbMarshaller.marshal(fcase, System.out); 

     } catch (JAXBException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

Sortie:

<case> 
    <code>code34</code> 
    <id>sah34</id> 
    <meta lot="asd" pip="sdafa" uc="asgd4"/> 
    <version>1</version> 
</case> 

La prochaine fois s'il vous plaît essayer de faire plus de recherche je ne suis pas un expert et je viens de googlé.

https://www.mkyong.com/java/jaxb-hello-world-example/

+0

je dois obtenir tout cela dans une seule classe .. que je peux créer un seul objet pour mettre tous – Leeza

+0

puis-je savoir - pourquoi? – LazerBanana

+0

je l'ai ajouté comme une réponse – Leeza

0

i besoin de créer un service de repos qui accepte xml format j'ai gien. C'est ce dont j'ai besoin dans une seule classe.

@POST 
@Path("/add") 
@Consumes("application/xml") 
@Produces("application/xml") 

public Response getper(Test test) 
{ 
String nam=test.getVersion(); 
int cd=test.getCode(); 
Res rs=new Res(); 
rs.setMessage(nam); 
. 
. 



return Response.status(200).entity(rs).build(); 

} 
+0

Ensuite, essayez de trouver des réponses à vos questions sur la pile, personne ne va faire tout le travail pour vous, si vous ne pouvez pas poser la bonne question même . J'ai essayé et passé assez de temps ici, désolé, je vous souhaite bonne chance. – LazerBanana

+0

@LazerBanana Je suis vraiment désolé de perdre votre temps. c'est wat je voulais vraiment dire .. je sais créer xml en utilisant différentes classes .. ce dont j'avais besoin était en un seul.et ma classe de cas montre la même chose – Leeza