xml与java对象的快速互转

发布时间:2023-05-17 11:41:03

在制作流程图项目时,新的流程被定义为xml,xml和java对象需要互转

检查activiti的xml转换方法,发现转换太麻烦,需要逐步分析xml

后来发现直接使用jaxb可以快速实现互转,现在jaxb在jdk内,不需要引入xml包的外部分析

具体如下:

@XmlRootElement(name = "mxGraphModel")public class MxGraphModel {        private MxRoot root;    @XmlElement(name = "root")    public MxRoot getRoot() {        return root;    }    public void setRoot(MxRoot root) {        this.root = root;    }}
1.根据XML构建java对象

java对象可以通过直接使用注释来声明,其他相关注释如下:

1.@XmlRootElement,用于类级注释,对应xml的跟踪元素。根节点的名称是通过name属性定义的。

2.@XmlAccessorType,定义映射类中的任何类型都需要映射到xml。(如果没有@XmlAccessorType,默认使用XmlAccestype.PUBLIC_MEMBER注释)

  参数:XmlAccessType.FIELD: java对象中的所有成员变量。

  XmlAccessType.PROPERTY:所有通过getter/setter访问java对象的成员变量。

  XmlAccessType.PUBLIC_MEMBER:通过getter/setter访问java对象中所有public访问权限的成员变量和成员变量。

  XmlAccessType.NONE: java对象的所有属性都不映射为xml元素。

3.@XmlAttribute,将java对象的属性映射为xml属性,并通过name属性生成的xml属性指定别名。

4.@XmlElement,指定字段或get/set方法映射到xml的节点。根节点的名称是通过name属性定义的。

5.@XmlElementWrapper,为数组或集合定义一个父节点。这个父节点的名称是通过name属性定义的。

二、实现java和xml的互转
/**     * xml转向对象     *      * @param xml     * @return     * @throws JAXBException     */    public MxGraphModel convertToGraphModel(String xml) throws JAXBException {        StringReader reader = new StringReader(xml);        JAXBContext jaxbContext = JAXBContext.newInstance(MxGraphModel.class);        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();        MxGraphModel graphModel = (MxGraphModel) jaxbUnmarshaller.unmarshal(reader);        return graphModel;    }/**     * 将对象转化为过程XMLL     *      * @param graphModel     * @return     * @throws JAXBException     */    public String convertToXML(MxGraphModel graphModel) throws JAXBException {        JAXBContext jaxbContext = JAXBContext.newInstance(MxGraphModel.class);        StringWriter writer = new StringWriter();        Marshaller marshaller = jaxbContext.createMarshaller();        marshaller.marshal(graphModel, writer);        String xmlStr = writer.toString();        xmlStr = StringUtils.replace(xmlStr, """, "'");        return xmlStr;    }

上述方法转换简单,易于理解,但唯一的缺点是XML分析依赖于整个对象,XML分析不能动态增加,但在这个阶段,这种方法就足够了!

上一篇 java多线程池引用传递 java 多线程调用接口
下一篇 java多模块热部署 多模块项目部署

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题