自定义类库:java转换xml文件转化pojo工具

moy25      2022-02-09     728

关键词:

一、之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo。

二、编写xml转化工具类XmlUtils

package com.moy.demo.common.utils;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;

/**
 * [Project]:cloud-demo-master  <br/>
 * [Email]:[email protected]  <br/>
 * [Date]:2018/4/30  <br/>
 * [Description]:  <br/>
 *
 * @author YeXiangYang
 */
public abstract class XmlUtils {

    public static <T> T xmlFileToObject(String xmlFilePath, Class<T> clazz) {
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        try (InputStream inputStream = contextClassLoader.getResourceAsStream(xmlFilePath)) {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            T result = (T) unmarshaller.unmarshal(inputStream);
            return result;
        } catch (Exception e) {
            throw new RuntimeException("convert xml to POJO failure!", e);
        }
    }

    public static <T> T xmlStringToObject(String xmlString, Class<T> clazz) {
        try (Reader reader = new StringReader(xmlString)) {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            T result = (T) unmarshaller.unmarshal(reader);
            return result;
        } catch (Exception e) {
            throw new RuntimeException("convert xml string to POJO failure!", e);
        }
    }
}

二、测试

  a、第一步:定义一个xml配置文件如:cityList.xml

技术分享图片
<?xml version="1.0" encoding="UTF-8" ?>
<c c1="0">
    <d d1="101020100" d2="上海" d3="shanghai" d4="上海"/>
    <d d1="101220101" d2="合肥" d3="hefei" d4="安徽"/>
    <d d1="101190101" d2="南京" d3="jiangshu" d4="江苏"/>
    <d d1="101010100" d2="北京" d3="beijing" d4="北京"/>
    <d d1="101270101" d2="成都" d3="chengdu" d4="四川"/>
</c>
View Code

  b、第二步:编写xml对应的实体City和CityList,并添加相应注解

技术分享图片
package com.moy.demo.common.utils;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * [Project]:cloud-demo-master  <br/>
 * [Email]:[email protected]  <br/>
 * [Date]:2018/4/30  <br/>
 * [Description]:  <br/>
 *
 * @author YeXiangYang
 */
@XmlRootElement(name = "d")
@XmlAccessorType(XmlAccessType.FIELD)
public class City {
    @XmlAttribute(name = "d1")
    private String cityId;
    @XmlAttribute(name = "d2")
    private String cityName;
    @XmlAttribute(name = "d3")
    private String cityCode;
    @XmlAttribute(name = "d4")
    private String province;

    public String getCityId() {
        return cityId;
    }

    public void setCityId(String cityId) {
        this.cityId = cityId;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getCityCode() {
        return cityCode;
    }

    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    @Override
    public String toString() {
        return "City{" +
                "cityId=‘" + cityId +  +
                ", cityName=‘" + cityName +  +
                ", cityCode=‘" + cityCode +  +
                ", province=‘" + province +  +
                };
    }
}
View Code
技术分享图片
package com.moy.demo.common.utils;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

/**
 * [Project]:cloud-demo-master  <br/>
 * [Email]:[email protected]  <br/>
 * [Date]:2018/4/30  <br/>
 * [Description]:  <br/>
 *
 * @author YeXiangYang
 */
@XmlRootElement(name = "c")
@XmlAccessorType(XmlAccessType.FIELD)
public class CityList {
    @XmlElement(name = "d")
    private List<City> cityList;

    public List<City> getCityList() {
        return cityList;
    }

    public void setCityList(List<City> cityList) {
        this.cityList = cityList;
    }

    @Override
    public String toString() {
        return "CityList{" +
                "cityList=" + cityList +
                };
    }
}
View Code

  c、编写单元测试XmlUtilsTest

技术分享图片
package com.moy.demo.common.utils;

import org.junit.Test;

import static org.junit.Assert.*;

/**
 * [Project]:demo-master  <br/>
 * [Email]:[email protected]  <br/>
 * [Date]:2018/5/2  <br/>
 * [Description]:  <br/>
 *
 * @author YeXiangYang
 */
public class XmlUtilsTest {

    @Test
    public void xmlFileToObject() {
        CityList cityList = XmlUtils.xmlFileToObject("cityList.xml", CityList.class);
        System.out.println(cityList);
    }

    @Test
    public void xmlStringToObject() {
        String xmlString = "<?xml version="1.0" encoding="UTF-8" ?>
" +
                "<c c1="0">
" +
                "    <d d1="101020100" d2="上海" d3="shanghai" d4="上海"/>
" +
                "    <d d1="101220101" d2="合肥" d3="hefei" d4="安徽"/>
" +
                "    <d d1="101190101" d2="南京" d3="jiangshu" d4="江苏"/>
" +
                "    <d d1="101010100" d2="北京" d3="beijing" d4="北京"/>
" +
                "    <d d1="101270101" d2="成都" d3="chengdu" d4="四川"/>
" +
                "</c>";

        CityList cityList = XmlUtils.xmlStringToObject(xmlString, CityList.class);
        System.out.println(cityList);
    }

}
View Code

  

 

yexiangyang

[email protected]


 

需要基于 xml-mapping 将 POJO 转换为 XML 和 JSON 的工具

】需要基于xml-mapping将POJO转换为XML和JSON的工具【英文标题】:AtoolfortransformingPOJOtoXMLandJSON,basedonxml-mappingisneeded【发布时间】:2011-07-0821:56:58【问题描述】:我需要一个可以将POJO转换为XML和JSON字符串的开源工具。如果可以通过xml... 查看详情

OpenCSV:如何使用自定义列标题和自定义列位置从 POJO 创建 CSV 文件?

】OpenCSV:如何使用自定义列标题和自定义列位置从POJO创建CSV文件?【英文标题】:OpenCSV:HowtocreateCSVfilefromPOJOwithcustomcolumnheadersandcustomcolumnpositions?【发布时间】:2017-12-2512:15:30【问题描述】:我创建了一个MappingsBean类,其中指定... 查看详情

java中如何自定义xml文件中的xml格式

】java中如何自定义xml文件中的xml格式【英文标题】:Howtocustomizethexmlformatinanxmlfileinjava【发布时间】:2021-10-0610:57:50【问题描述】:我正在使用JaxbMarshaller将java对象转换为xml,并将Marshaller.JAXB_FORMATTED_OUTPUT设置为true。这给了我以... 查看详情

自定义mvc框架之工具类-图像处理类

...4个类:ubuntu:通过封装验证码类库一步步安装php的gd扩展自定义MVC框架之工具类-分页类的封装自定义MVC框架之工具类-文件上传类图像处理类:1,图片加水印处理(支持任意位置与九宫格位置)2,图片缩放处理(等比缩放,不变形裁剪... 查看详情

hutool国产工具类库

参考技术AJava工具类库:Hutool    该工具类,只需要引入它的依赖一个官方提供的例子,模拟一下表单提交Hutool还有其他很多工具,比如对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种U... 查看详情

如何在 .xml 文件而不是 .java 文件中设置自定义字体?

】如何在.xml文件而不是.java文件中设置自定义字体?【英文标题】:Howtosetcustomfontin.xmlfileinsteadof.javafile?【发布时间】:2016-07-2803:27:48【问题描述】:我正在创建一个要在其中设置自定义字体的应用程序。但我不能在.xml文件中使... 查看详情

为按钮生成选择器 xml 的 Android 工具

...1-1511:27:39【问题描述】:我想知道是否有人知道为您的自定义按钮生成xml选择器文件的工具。我有点厌倦了创建按钮,将它们转换为.9.png文件,然后在xml中复制和粘贴自定义选择器...我知道这些工具:http://www.androidicongenerato 查看详情

Spring RestTemplate 响应中从 JSON 到 Java/POJO 的自定义映射

】SpringRestTemplate响应中从JSON到Java/POJO的自定义映射【英文标题】:CustomMappingfromJSONtoJava/POJOinSpringRestTemplateresponse【发布时间】:2020-02-0700:26:12【问题描述】:我有一个SpringBoot应用程序,我在其中使用RestTemplate调用RestAPI,我收到... 查看详情

转:jaxbcontext生成xml文件或java类对象转化注解

...LBinding),提供了一个快速便捷的方式将Java对象与XML进行转换。在JAX-WS(Java的WebService规范之一)中,JDK1.6自带的版本JAX-WS2.1,其底层支持就是JAXB。   JAXB可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转... 查看详情

是否有将 Java POJO 转换为 JSON 和 XML 的库? [关闭]

】是否有将JavaPOJO转换为JSON和XML的库?[关闭]【英文标题】:IstherealibrarytoconvertJavaPOJOstoandfromJSONandXML?[closed]【发布时间】:2010-10-1402:56:21【问题描述】:我有一个对象图,我想在JSON和XML之间进行转换,以创建REST样式的API。我觉... 查看详情

java示例代码_基于带有自定义逻辑的模板转换XML。哪个框架?如何实现流媒体

java示例代码_基于带有自定义逻辑的模板转换XML。哪个框架?如何实现流媒体 查看详情

springmvc--09自定义converters(代码片段)

自定义Converters文章目录自定义Converters11.1什么是Converters11.2编写日期转化器11.3XML配置转化器11.4Java类配置转化器11.1什么是ConvertersContervers中文就是转化器的意思,在我们的SprinMVC中其实就是帮助我们转化数据的转化器,比... 查看详情

springmvc--09自定义converters(代码片段)

自定义Converters文章目录自定义Converters11.1什么是Converters11.2编写日期转化器11.3XML配置转化器11.4Java类配置转化器11.1什么是ConvertersContervers中文就是转化器的意思,在我们的SprinMVC中其实就是帮助我们转化数据的转化器,比... 查看详情

如何在c#中将XML转换为自定义对象[重复]

】如何在c#中将XML转换为自定义对象[重复]【英文标题】:HowtoconvertXMLtoacustomobjectinc#[duplicate]【发布时间】:2017-11-0423:51:18【问题描述】:XML文件如下。希望能够读取和写入以下文件。使用下面的代码,我可以搜索特定的页面名... 查看详情

自定义类型转换器

这里只讲日期类型转换器的自定义Struts2中有一些自定义类型转化器位置:但是此处的日期类型转换器只是将yyyy-MM-dd日期格式转化成为TueJun0600:00:00CST2017而对于产品来说可能涉及到yyyy/MM/dd和yyyyMMdd等,接下来就看例子吧!首先定... 查看详情

使用自定义 XSLT 将 XML 转换为 JSON 会丢失花括号

】使用自定义XSLT将XML转换为JSON会丢失花括号【英文标题】:TransformingXMLtoJSONwithcustomXSLTloosescurlybraces【发布时间】:2014-05-0321:56:54【问题描述】:我有一个.NET库,它使用XSLT文件将啤酒xml文件转换为web应用程序的json。XSLT文件看... 查看详情

深入了解java并发——《javaconcurrencyinpractice》14.构建自定义的同步工具

虽然章节的目的是介绍如何基于AQS等基类来构建自定义的同步工具,但详细的介绍了AQS的原理,并且详细的讲解了java.util.concurrent类库中许多基于AQS的常用同步工具对AQS的实现及原理。了解AQS之后对ReentrantLock、Semaphore、Co... 查看详情

将 Java 类库中的类替换为自定义版本

】将Java类库中的类替换为自定义版本【英文标题】:ReplaceaclasswithintheJavaclasslibrarywithacustomversion【发布时间】:2016-02-1109:57:25【问题描述】:javax/swing/plaf/basic中的类BasicLabelUI受confirmedbug影响。在我的应用程序中,我需要fixedversio... 查看详情