JAXB简单自定义适配器以及简单使用

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

程序中简单使用

/**
 * Created by lv on 2016/4/3.
 */
public class Person {
    private String name;
    private LocalDate birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //注意,此处使用自定义适配器来解析date类型的字段
    @XmlJavaTypeAdapter(LocalDateAdapter.class)
    public LocalDate getBirthday() {
        return birthday;
    }

    public void setBirthday(LocalDate birthday) {
        this.birthday = birthday;
    }
}

@XmlRootElement(name = "persons")
public class PersonListWrapper {

    private List<Person> persons;

    @XmlElement(name = "person")
    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
}

//定义适配器


/**
 * Created by lv on 2016/4/3.
 */
public class LocalDateAdapter extends XmlAdapter<String,LocalDate>{


    @Override
    public LocalDate unmarshal(String v) throws Exception {
        return LocalDate.parse(v);
    }

    @Override
    public String marshal(LocalDate v) throws Exception {
        return v.toString();
    }
}

程序中使用:

/**
 * 从xml文件中加载数据
 * @param file
 */
public void loadPersonDataFromFile(File file) {
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(PersonListWrapper.class);
        Unmarshaller um = jaxbContext.createUnmarshaller();
        PersonListWrapper wrapper = (PersonListWrapper) um.unmarshal(file);
    } catch (JAXBException e) {
        e.printStackTrace();
    }

}

/**
 * 保存数据到xml文件中
 * @param file
 */
public void savePersonDataToFile(File file){
    try {
        JAXBContext context = JAXBContext
                .newInstance(PersonListWrapper.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        PersonListWrapper wrapper = new PersonListWrapper();
        wrapper.setPersons(personData);
        m.marshal(wrapper, file);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}


你可能感兴趣的:(JAXB)