Oui, oui je sais que beaucoup de questions ont été posées sur ce sujet. Mais je ne trouve toujours pas la solution à mon problème. J'ai un objet Java annoté de propriété. Par exemple Customer, comme dans cet exemple . Et je veux une représentation String de celui-ci. Google recommande d'utiliser JAXB à ces fins. Mais dans tous les exemples, le fichier XML créé est imprimé dans un fichier ou une console, comme ceci:
File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
Mais je dois utiliser cet objet et envoyer sur le réseau au format XML. Je veux donc obtenir une chaîne qui représente XML.
String xmlString = ...
sendOverNetwork(xmlString);
Comment puis-je faire ceci?
StringWriter
est très vieux. Sous les couvertures, il utiliseStringBuffer
une approche beaucoup plus rapide,StringBuilder
mais cela n'existait pas lorsque StringWriter a été créé pour la première fois. Pour cette raison, chaque appel àsw.toString()
implique une synchronisation. Mauvais si vous recherchez la performance.Une option pratique consiste à utiliser javax.xml.bind.JAXB :
Le processus inverse (unmarshal) serait:
Pas besoin de traiter les exceptions vérifiées dans cette approche.
la source
Comme le mentionne A4L, vous pouvez utiliser StringWriter. Fournir ici un exemple de code:
la source
Vous pouvez le rassembler en a
StringWriter
et saisir sa chaîne. detoString()
.la source
StringWriter
. Le lien n'est que de la documentation.StringWriter
, passez-le àmarshal()
, appeleztoString()
.Marshaller
a plusieurs méthodes surchargées de marshal, jetez simplement un œil à leurs paramètres et à quoi ils servent et vous trouverez la réponse.Test et travail du code Java pour convertir un objet Java en XML:
Customer.java
createXML.java
la source
Pour convertir un objet en XML en Java
Customer.java
ConvertObjToXML.java
Essayez avec cet exemple.
la source
Utilisation de ByteArrayOutputStream
la source
J'ai pris l'implémentation JAXB.marshal et ajouté jaxb.fragment = true pour supprimer le prologue XML. Cette méthode peut gérer des objets même sans l'annotation XmlRootElement. Cela lève également l'exception DataBindingException non vérifiée.
Si l'avertissement du compilateur vous dérange, voici la version à deux paramètres basée sur un modèle.
la source
Du code générique pour créer XML Stirng
object -> est une classe Java pour le convertir en nom XML
-> est juste un espace de nom comme une chose - pour différencier
la source
Voici une classe util pour le marshaling et le démarshaling des objets. Dans mon cas, c'était une classe imbriquée, donc je l'ai rendue statique JAXBUtils.
la source
la source
Utilisez cette fonction pour convertir Object en chaîne xml (doit être appelée comme convertToXml (sourceObject, Object.class);) ->
Utilisez cette fonction pour convertir une chaîne xml en Object back -> (devrait être appelée comme
createObjectFromXmlString(xmlString, Object.class)
)la source