xml与java对象的快速互转

简介: 做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xml后面发现直接用jaxb就可以很快实现互转,而且现在这个jaxb在jdk内,不需要引入外部的解析xml的包具体如下:一.

做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转
查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xml
后面发现直接用jaxb就可以很快实现互转,而且现在这个jaxb在jdk内,不需要引入外部的解析xml的包
具体如下:
一.根据XML构建java对象

@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;
    }

}

该java对象直接使用注解就可以声明,其他相关注解如下:
1.@XmlRootElement,用于类级别的注解,对应xml的跟元素。通过name属性定义这个根节点的名称。
2.@XmlAccessorType,定义映射这个类中的何种类型都需要映射到xml。(如果不存在@XmlAccessorType,默认使用XmlAccessType.PUBLIC_MEMBER注解)
  参数:XmlAccessType.FIELD: java对象中的所有成员变量。
  XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量。
  XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量。
  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;
    }

/**
     * 将对象转为流程XML
     * 
     * @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的解析,不过现阶段来说,这个办法已经足够了!

相关文章
|
1天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
1天前
|
Java Android开发
java利用xml-rpc协议操作wordpress博客
java利用xml-rpc协议操作wordpress博客
|
1天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
1天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
2天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
2天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
9 3
|
2天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
14 3
|
2天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
3天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
26 1
|
9天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
29 4