Xml serialization JAXB vs Jackson-dataformat-xml?
My vote is for #2 Jackson library + Jackson-dataformat-xml.jarHave a look on the code for JSON and XML, it's just the same with bit change here and there.
****MainClass**** import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class MainClass {public static void main(String[] args) throws JsonProcessingException { // Serialization: java obj to json--> writeValueAsString // DeSerialization: json to java obj--> ReadValue XmlMapper mapper1 = new XmlMapper(); ObjectMapper mapper2 = new ObjectMapper(); mapper1.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); mapper2.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); mapper1.enable(SerializationFeature.INDENT_OUTPUT); mapper2.enable(SerializationFeature.INDENT_OUTPUT); MyPojo mypojo = new MyPojo(); mypojo.setName("Dhani"); mypojo.setId("18082013"); mypojo.setAge(5); String jsonStringXML = mapper1.writeValueAsString(mypojo); String jsonStringJSON = mapper2.writeValueAsString(mypojo); // takes java class with def or customized constructors and creates JSON System.out.println("XML is " + "\n" + jsonStringXML + "\n"); System.out.println("Json is " + "\n" + jsonStringJSON);} }*****MyPojo.java***** import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; @JsonPropertyOrder({ "name", "age", "id", "note" }) @JacksonXmlRootElement(namespace = "urn:stackify:jacksonxml", localName = "myPOJO") public class MyPojo {@JsonProperty("_id")private String id;private String name;private int age;@JsonIgnoreprivate String note;public String getNote() { return note;}public void setNote(String note) { this.note = note;}public String getId() { return id;}public void setId(String id) { this.id = id;}public String getName() { return name;}public void setName(String name) { this.name = name;}public int getAge() { return age;}public void setAge(int age) { this.age = age;} } ***RESULT**** XML is <myPOJO xmlns="urn:stackify:jacksonxml"> <name xmlns="">Dhani</name> <age xmlns="">5</age> <_id xmlns="">18082013</_id> </myPOJO> Json is { "name" : "Dhani", "age" : 5, "_id" : "18082013" }
I vote for answer #2: using Jackson-dataformat-xml. We were in a similar situation and found that serializing to XML via Jackson was easier than expected. This is because XmlMapper
extends ObjectMapper
so all of our configuration changes (mix-ins, using JavaTimeModule
, etc) could be directly applied to XmlMapper
and they just worked.
You've already configured Jackson to output your data as you require so the hard part is done. I recommend leveraging the effort you've already invested and going with Jackson-dataformat-xml.