JAXB covers composition and inheritance transparently. The objects to be stored and retrieved may contain other objects or may have inherited attributes.
Here is a simplified Java class. You only need to annotate with the XmlRootElement and the XmlAcessorType tags at the class level.
package com.inventasoft.domain; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "Person") @XmlAccessorType(XmlAccessType.FIELD) public class Person { private Date birthDate; public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } }
Here is the code to create xml content from the object, write it out to a file, and read it back in.
package com.inventasoft.test.jaxb; import com.inventasoft.domain.Person; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import junit.framework.TestCase; public class PersonSimpleTest extends TestCase { public void testPerson() throws Exception { Person testWrite = new Person(); // write it out as XML JAXBContext jaxbContext = JAXBContext.newInstance(testWrite.getClass()); StringWriter writer = new StringWriter(); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(testWrite, writer); writeToFile("test.xml", writer.toString()); String data = readFromFile("test.xml"); // read it from XML Object o = jaxbContext.createUnmarshaller().unmarshal( new StringReader(data)); Person testRead = (Person) o; assertEquals(testWrite.getBirthDate(), testRead.getBirthDate()); } private void writeToFile(String filename, String data) throws Exception { BufferedWriter bw = null; try { File f = new File(filename); bw = new BufferedWriter(new FileWriter(f)); bw.write(data); } catch (Exception e) { e.printStackTrace(); } finally { if (bw != null) bw.close(); } } private String readFromFile(String filename) throws Exception { BufferedReader br = null; StringBuilder content = new StringBuilder(); try { File f = new File(filename); br = new BufferedReader(new FileReader(f)); String line = null; while ((line = br.readLine()) != null) { content.append(line); } } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) br.close(); } return content.toString(); } }
And here is the sample ouput XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Person> <birthDate>2010-09-13T08:52:25.298-06:00</birthDate> </Person>
The JAXB files you will need are jaxb-impl.jar, jaxb-xjc.jar.
TeachTech
ReplyDeleteTeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
ReplyDeleteTeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech
TeachTech