专栏首页JAVA后端开发xml与java对象的快速互转

xml与java对象的快速互转

做流程图的项目时,新的流程定义为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的解析,不过现阶段来说,这个办法已经足够了!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • flowable实现多实例节点的自由跳转

    最近弃用activiti,改用flowable,发现在实现多节点实例自由跳转时,有很大区别。 自由跳转整理如下:

    星痕
  • activiti explorer跨模板复制流程节点

    最近的项目是用activiti explorer做流程前端。 功能做出来后,经常被用户反馈 ,说流程页面不好用。 画一个流程图后,再画一个,都要重头开始,如...

    星痕
  • JWT的TOKEN续期功能

    JWT里有一个关键的东东,就是续期TOKEN,即TOKEN快过期时,刷新一个新的TOKEN给客户端. 办法如下: 1.后端生成TOKEN

    星痕
  • [golang]golang解析xml到结构体的时候无法解析

    这是一个很简单的问题,但是,简单的问题,如果由于格式不准确,那么就会变成很复杂的问题。

    用户2353021
  • PHP完成微信小程序在线支付功能

    沈唁
  • VBA编写Ribbon Custom UI编辑器00

    自2007版本的Office开始,微软使用了一种叫做Ribbon的全新的菜单界面:

    xyj
  • Vue实战开发

    4.新建Fwsb组件,这个相当于程序员的入口文件。在src/components/目录下新建Fwsb.vue文件。文件内容

    楠楠
  • 使用PlaceHolder,测试碰见的问题

    org.springframework.beans.factory.BeanCreationException: Error creating bean wit...

    梅花
  • go的websocket实现原理与用法详解

    本文实例讲述了go的websocket实现原理与用法。分享给大家供大家参考,具体如下: websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工...

    李海彬
  • go的websocket实现原理与用法详解

    本文实例讲述了go的websocket实现原理与用法。分享给大家供大家参考,具体如下: websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工...

    李海彬

扫码关注云+社区

领取腾讯云代金券