Java tutorial
import java.io.StringReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlValue; import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; class StringAdapter extends XmlAdapter<StringAdapter.AdaptedString, String> { @Override public String unmarshal(AdaptedString adaptedString) throws Exception { if (null == adaptedString) { return null; } String string = adaptedString.value; if ("".equals(string)) { return null; } return string; } @Override public AdaptedString marshal(String string) throws Exception { AdaptedString adaptedString = new AdaptedString(); adaptedString.value = string; return adaptedString; } public static class AdaptedString { @XmlValue public String value; } } @XmlRootElement(name = "Root") class Root { String item; @XmlElement(name = "Item", required = true, nillable = true) @XmlJavaTypeAdapter(StringAdapter.class) public String getItem() { return item; } public void setItem(String item) { this.item = item; } } public class Main { JAXBContext jc; public Main() throws JAXBException { jc = JAXBContext.newInstance(Root.class); } public static void main(String[] args) throws Exception { Main demo = new Main(); demo.demo("<Root><Item/></Root>"); demo.demo("<Root><Item>Hello World</Item></Root>"); } private void demo(String xml) throws JAXBException { StringReader stringReader = new StringReader(xml); Unmarshaller unmarshaller = jc.createUnmarshaller(); Root root = (Root) unmarshaller.unmarshal(stringReader); System.out.println("ITEM: " + root.getItem()); System.out.print("OUTPUT: "); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); marshaller.marshal(root, System.out); } }