how can covert xml file simple java bean? simple xml file without xsd, generated java bean, don't have access to.
i tried using xmlbeans first generate xmd xml , generate classes xsd. got bunch of classes. looking single java bean class.
jaxb
jaxb (jsr-222) provides easy way convert objects xml. there many open source implementations of standard including:
- metro jaxb (the reference implementation included in java se 6)
- eclipselink jaxb (moxy), i'm tech lead
- apache jaxme
jaxb has default mapping java objects xml. mapping can customized through application of annotations.
import javax.xml.bind.annotation.xmlrootelement; import javax.xml.bind.annotation.element; @xmlrootelement public class address { private string street; private string city; private string state; private string country; @xmlelement(name="postal-code") private string postalcode; } would correspond following xml:
<address> <street>123 street</street> <city>any town</city> <state>a state</state> <postal-code>12345</postal-code> </address> eclipselink jaxb (moxy)
moxy has xpath based mapping extension. means can take our same address class , map google's geocode format:
import javax.xml.bind.annotation.xmlrootelement; import javax.xml.bind.annotation.xmltype; import org.eclipse.persistence.oxm.annotations.xmlpath; @xmlrootelement(name="kml") @xmltype(proporder={"country", "state", "city", "street", "postalcode"}) public class address { @xmlpath("response/placemark/ns:addressdetails/ns:country/ns:administrativearea/ns:subadministrativearea/ns:locality/ns:thoroughfare/ns:thoroughfarename/text()") private string street; @xmlpath("response/placemark/ns:addressdetails/ns:country/ns:administrativearea/ns:subadministrativearea/ns:locality/ns:localityname/text()") private string city; @xmlpath("response/placemark/ns:addressdetails/ns:country/ns:administrativearea/ns:administrativeareaname/text()") private string state; @xmlpath("response/placemark/ns:addressdetails/ns:country/ns:countrynamecode/text()") private string country; @xmlpath("response/placemark/ns:addressdetails/ns:country/ns:administrativearea/ns:subadministrativearea/ns:locality/ns:postalcode/ns:postalcodenumber/text()") private string postalcode; } the above class corresponds following xml:
<?xml version="1.0" encoding="utf-8"?> <kml xmlns="http://earth.google.com/kml/2.0" xmlns:ns="urn:oasis:names:tc:ciq:xsdschema:xal:2.0"> <response> <placemark> <ns:addressdetails> <ns:country> <ns:countrynamecode>us</ns:countrynamecode> <ns:administrativearea> <ns:administrativeareaname>ca</ns:administrativeareaname> <ns:subadministrativearea> <ns:locality> <ns:localityname>mountain view</ns:localityname> <ns:thoroughfare> <ns:thoroughfarename>1600 amphitheatre pkwy</ns:thoroughfarename> </ns:thoroughfare> <ns:postalcode> <ns:postalcodenumber>94043</ns:postalcodenumber> </ns:postalcode> </ns:locality> </ns:subadministrativearea> </ns:administrativearea> </ns:country> </ns:addressdetails> </placemark> </response> </kml> for more information
Comments
Post a Comment