Convert Java object to XML string

Yes, yes, I know that many questions have been asked about this topic. But I still can’t find a solution to my problem. I have an annotated Java property object. For example, Customer, as in this example . And I want this to be a string representation. Google recommends using JAXB for such purposes. But in all examples, the created XML file is printed to a file or console, for example:

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); 

But I have to use this object and send over the network in XML format. So I want to get a string representing XML.

 String xmlString = ... sendOverNetwork(xmlString); 

How can i do this?

+75
java xml jaxb
Nov 16 '14 at 16:38
source share
11 answers

You can use the Marshaller method for marshaling, which takes Writer as a parameter:

Marshal (object, writer)

and pass it an implementation that can build a String object

Direct known subclasses: BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter

Call its toString method to get the actual String value.

So:

 StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(customer, sw); String xmlString = sw.toString(); 
+89
Nov 16 '14 at 16:55
source share

As a reference to A4L, you can use StringWriter. Sample code example:

 private static String jaxbObjectToXML(Customer customer) { String xmlString = ""; try { JAXBContext context = JAXBContext.newInstance(Customer.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // To format XML StringWriter sw = new StringWriter(); m.marshal(customer, sw); xmlString = sw.toString(); } catch (JAXBException e) { e.printStackTrace(); } return xmlString; } 
+29
Jan 20 '16 at 14:25
source share

A convenient option is to use javax.xml.bind.JAXB :

 StringWriter sw = new StringWriter(); JAXB.marshal(customer, sw); String xmlString = sw.toString(); 

The reverse process (marshalless) will look like this:

 Customer customer = JAXB.unmarshal(new StringReader(xmlString), Customer.class); 

There is no need to deal with checked exceptions in this approach.

+24
Mar 29 '17 at 3:40
source share

You can select its StringWriter and capture its string. from toString() .

+5
Nov 16 '14 at 16:43
source share

Convert an object to XML in Java

Customer.java

 package com; import java.util.ArrayList; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * * @author ABsiddik */ @XmlRootElement public class Customer { int id; String name; int age; String address; ArrayList<String> mobileNo; public int getId() { return id; } @XmlAttribute public void setId(int id) { this.id = id; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public String getAddress() { return address; } @XmlElement public void setAddress(String address) { this.address = address; } public ArrayList<String> getMobileNo() { return mobileNo; } @XmlElement public void setMobileNo(ArrayList<String> mobileNo) { this.mobileNo = mobileNo; } } 

ConvertObjToXML.java

 package com; import java.io.File; import java.io.StringWriter; import java.util.ArrayList; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; /** * * @author ABsiddik */ public class ConvertObjToXML { public static void main(String args[]) throws Exception { ArrayList<String> numberList = new ArrayList<>(); numberList.add("01942652579"); numberList.add("01762752801"); numberList.add("8800545"); Customer c = new Customer(); c.setId(23); c.setName("Abu Bakar Siddik"); c.setAge(45); c.setAddress("Dhaka, Bangladesh"); c.setMobileNo(numberList); File file = new File("C:\\Users\\NETIZEN-ONE\\Desktop \\customer.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(c, file);// this line create customer.xml file in specified path. StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(c, sw); String xmlString = sw.toString(); System.out.println(xmlString); } } 

Try this example.

+2
May 03 '16 at 11:25
source share

Testing And working Java code to convert a java object to XML:

Customer.java

 import java.util.ArrayList; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Customer { String name; int age; int id; String desc; ArrayList<String> list; public ArrayList<String> getList() { return list; } @XmlElement public void setList(ArrayList<String> list) { this.list = list; } public String getDesc() { return desc; } @XmlElement public void setDesc(String desc) { this.desc = desc; } public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public int getId() { return id; } @XmlAttribute public void setId(int id) { this.id = id; } } 

createXML.java

 import java.io.StringWriter; import java.util.ArrayList; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class createXML { public static void main(String args[]) throws Exception { ArrayList<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); Customer c = new Customer(); c.setAge(45); c.setDesc("some desc "); c.setId(23); c.setList(list); c.setName("name"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(c, sw); String xmlString = sw.toString(); System.out.println(xmlString); } } 
+1
Apr 27 '16 at 7:17
source share

Using ByteArrayOutputStream

 public static String printObjectToXML(final Object object) throws TransformerFactoryConfigurationError, TransformerConfigurationException, SOAPException, TransformerException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); XMLEncoder xmlEncoder = new XMLEncoder(baos); xmlEncoder.writeObject(object); xmlEncoder.close(); String xml = baos.toString(); System.out.println(xml); return xml.toString(); } 
+1
Jun 23 '16 at 21:31
source share

Some common code for creating XML Stirng

object -> Java class to convert it to XML
a name -> it's just a namespace, as a thing - to differentiate

 public static String convertObjectToXML(Object object,String name) { try { StringWriter stringWriter = new StringWriter(); JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass()); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); QName qName = new QName(object.getClass().toString(), name); Object root = new JAXBElement<Object>(qName,java.lang.Object.class, object); jaxbMarshaller.marshal(root, stringWriter); String result = stringWriter.toString(); System.out.println(result); return result; }catch (Exception e) { e.printStackTrace(); } return null; } 
0
Sep 12 '18 at 8:53
source share

I took the implementation of JAXB.marshal and added jaxb.fragment = true to remove the XML prolog. This method can process objects even without an XmlRootElement annotation. This also raises an unchecked DataBindingException.

 public static String toXmlString(Object o) { try { Class<?> clazz = o.getClass(); JAXBContext context = JAXBContext.newInstance(clazz); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); // remove xml prolog marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // formatted output final QName name = new QName(Introspector.decapitalize(clazz.getSimpleName())); JAXBElement jaxbElement = new JAXBElement(name, clazz, o); StringWriter sw = new StringWriter(); marshaller.marshal(jaxbElement, sw); return sw.toString(); } catch (JAXBException e) { throw new DataBindingException(e); } } 

If you are worried about the compiler warning, then here is the template version with two parameters.

 public static <T> String toXmlString(T o, Class<T> clazz) { try { JAXBContext context = JAXBContext.newInstance(clazz); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); // remove xml prolog marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // formatted output QName name = new QName(Introspector.decapitalize(clazz.getSimpleName())); JAXBElement jaxbElement = new JAXBElement<>(name, clazz, o); StringWriter sw = new StringWriter(); marshaller.marshal(jaxbElement, sw); return sw.toString(); } catch (JAXBException e) { throw new DataBindingException(e); } } 
0
Mar 26 '19 at 22:54
source share
 import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; private String generateXml(Object obj, Class objClass) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(objClass); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(obj, sw); return sw.toString(); } 
-one
Jan 25 '17 at 2:39 on
source share

Use this function to convert an object to an XML string (should be called convertToXml (sourceObject, Object.class);) ->

 import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.namespace.QName; public static <T> String convertToXml(T source, Class<T> clazz) throws JAXBException { String result; StringWriter sw = new StringWriter(); JAXBContext jaxbContext = JAXBContext.newInstance(clazz); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); QName qName = new QName(StringUtils.uncapitalize(clazz.getSimpleName())); JAXBElement<T> root = new JAXBElement<T>(qName, clazz, source); jaxbMarshaller.marshal(root, sw); result = sw.toString(); return result; } 

Use this function to convert an xml string to Object back -> (should be called as createObjectFromXmlString(xmlString, Object.class) )

 public static <T> T createObjectFromXmlString(String xml, Class<T> clazz) throws JAXBException, IOException{ T value = null; StringReader reader = new StringReader(xml); JAXBContext jaxbContext = JAXBContext.newInstance(clazz); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); JAXBElement<T> rootElement=jaxbUnmarshaller.unmarshal(new StreamSource(reader),clazz); value = rootElement.getValue(); return value; } 
-one
Apr 20 '17 at 9:11
source share



All Articles