XML转JavaBean的简单实现

2023-11-15

一个基于JSON的简单的XML转为Bean的方法

之前在做一个WEB-SERVICE的交互的时候,写的一个基于JSON的XML转Bean的方法;就把它整理处理! 如下:

>

  1. pom.xml

    所有需要的依赖包如下:

    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.4</version>
        <classifier>jdk15</classifier>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/xom/xom -->
    <dependency>
        <groupId>xom</groupId>
        <artifactId>xom</artifactId>
        <version>1.2.5</version>
    </dependency>
    
    
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.15</version>
    </dependency>
    


  2. 转换的工具类:

package com.xtonic.xml2javaBeanUtil;

import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.alibaba.fastjson.JSONObject;

import net.sf.json.xml.XMLSerializer;


public class XML2JaveBean {

    private static final ConcurrentHashMap<String, Map<String, Field>> BEAN_FIELDS_CACHE = new ConcurrentHashMap<String, Map<String, Field>>();

    private static final String DATETIME_REG = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{7}((\\+|-)\\d{2}:\\d{2})?";

    private static final String DATE_REG = "\\d{4}[-/]\\d{2}[-/]\\d{2}";

    private static final String DEFAULT_STRING_VALUE = "";

    private XML2JaveBean() {
    }

    public static <T> T XmlToJavaBean(InputStream xmlInputStream,Class<T> clazz) throws Exception {
        String xmlStr = new XMLSerializer().readFromStream(xmlInputStream).toString();
        JSONObject xmlJson = JSONObject.parseObject(xmlStr);
         System.out.println(xmlJson);
         return (T) pareseJSon(xmlJson, clazz);
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static <T> T pareseJSon(Map<String, Object> context, Class<T> clazz) throws Exception {
        T obj = clazz.newInstance();
        boolean isConllection = false;
        boolean isMap = false;
        Map<String, Field> fieldsCache = getFields(clazz);
        Field field = null;
        CollectionType collectionClass = null;
        Object tmpOjbect = null;
        String fieldKeyStr = null;
        for (String key : context.keySet()) {
            if (key.startsWith("@")) {
                fieldKeyStr = key.substring(1);
            } else {
                fieldKeyStr = key;
            }
            field = fieldsCache.get(fieldKeyStr.toUpperCase());
            // 判断XML里面的节点是否在实体类里面有对应的属性;
            if (field 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML转JavaBean的简单实现 的相关文章

随机推荐

  • 因为一个bug来深入探讨下分页插件PageHelper

    事情来源是这样的 因为某些操作失误 在使用分页插件pageHelper时 因为这样一句不起眼的操作 竟然引发了一系列的灾难 下面来看下灾难的由来 Page localPage PageHelper startPage page limit
  • Linux WIFI 驱动实验(USB和SDIO方式)

    目录 WIFI 驱动添加与编译 向Linux 内核添加WIFI 驱动 配置Linux 内核 编译WIFI 驱动 驱动加载测试 wireless tools 工具移植与测试 wireless tools 移植 wireless tools 工
  • 数据结构循环链表,增删改查基本操作

    一 双向循环链表的描述 和单链表的循环类似 双向链表也可以有循环表 循环表的引进是为了弥补双向链表不能向前遍历的弊端 在双向循环链表中 头结点的直接前驱为尾结点 而尾结点的直接后继为头结点 二 双向循环链表的存储结构 三 双向循环链表基本操
  • VS2012:LNK4098: 默认库“MSVCRT”与其他库的使用冲突

    VS2012警告 LINK warning LNK4098 默认库 MSVCRT 与其他库的使用冲突 请使用 NODEFAULTLIB library 原因 在使用多线程调试dll MDd 模式的时候 lt 位置 配置属性 c c 代码生成
  • 大厂偏爱的Agent技术究竟是个啥

    搜索关注微信公众号 捉虫大师 后端技术分享 架构设计 性能优化 源码阅读 问题排查 踩坑实践 hello大家好 我是小楼 今天给大家分享一个关于Agent技术的话题 也是后端启示录的第3篇文章 通过本文你可以了解到如下内容 什么是Agent
  • 硬盘安装Linux(ubuntu,centos)

    硬盘安装Linux ubuntu centos 硬盘安装Linux 使用硬盘安装Linux最大的好处不只是方便 是快速 之前使用U盘安装 很慢 没有记录具体时间 Ubuntu区别不大 本身比较小 安装介质只有2G ubuntu18 10 C
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Linux 实时查看文件 tail 命令详解

    Linux 实时查看文件 tail 命令详解 Linux 实时查看文件 tail 命令详解 一 概述 tail 命令用于显示文件的末尾内容 默认显示文件的最后 10 行 通常情况下 tail 命令用于实时查看日志文件 可以使用 f 参数跟踪
  • Python发送信息及附件到邮箱

    import smtplib import os from email mime text import MIMEText from email mime multipart import MIMEMultipart from email
  • PB的组合查询

    用PB进行数据库应用系统开发时 我们经常要对大量的数据进行筛选 查询 得到符合要求的记录 这就需要用到组合条件查询功能 我在作应用系统开发时 就自己编写了一个简单而又实用的组合条件查询模板窗口 只要用到组合条件查询的地方 都可从此窗口继承而
  • 【华为OD机试真题 JAVA】火星文计算

    JS版 华为OD机试真题 JS 火星文计算 标题 火星文计算 时间限制 1秒 内存限制 262144K 语言限制 不限 已知火星人使用的运算符为 其与地球人的等价公式如下 x y 2 x 3 y 4 x y 3 x y 2 1 其中x y是
  • webpack打包项目文件

    在项目开发中想了解一下使用webpack打包vue项目的具体操作 1 在命令窗口中使用npm run dev serve启动package json中配置的脚本运行项目 2 在build dev server js文件中 const con
  • 通行时间估计 读书笔记

    Learning to Estimate the Travel Time Didichuxing 中文提示 通行时间估计 特征提取 对路段中所有可能获取的数据进行特征提取 包括交叉路口 route 信号灯信息 路段长度 宽度 车道数 本段在
  • 【2023】华为OD机试真题Java-题目0198-整理扑克牌

    整理扑克牌 题目描述 给定一组数字 表示扑克牌的牌面数字 忽略扑克牌的花色 请安如下规则对这一组扑克牌进行整理 步骤一 对扑克牌进行分组 规则如下 当牌面数字相同张数大于等于4时 组合牌为炸弹 三张相同牌面数字 两张相同牌面数字 且三张牌与
  • 统计学---之样本方差与总体方差的区别

    前段日子重新整理了一下这个问题的解答 跟大家分享一下 如果有什么错误的话希望大家能够提出来 我会及时改正的 话不多说进入正题 首先 我们来看一下样本方差的计算公式 刚开始接触这个公式的话可能会有一个疑问就是 为什么样本方差要除以 n 1 而
  • Java加密技术(十一)——双向认证

    对于双向认证 做一个简单的描述 服务器端下发证书 客户端接受证书 证书带有公钥信息 用于验证服务器端 对数据加密 解密 起到OSI五类服务的认证 鉴别 服务和保密性服务 这只是单向认证 为什么 因为客户端可以验证服务器端 但服务器端不能验证
  • Mac前往服务器文件夹变成灰色,[mac]解决移动硬盘文件显示灰色的问题

    在mac上创建的文件 在复制到移动硬盘上后 变成灰色且不能操作 项目已被 macOS 使用 不能打开 在移动硬盘上变成灰色的文件 双击会提示 项目已被 macOS 使用 不能打开 打开终端输入 ls eln 灰色文件路径 image png
  • 新手如何使用pycharm

    开启coding之旅 我在写代码的时候 我总是因为安装包和环境的问题 代码总是bug不断 短段的两天时间 我整天扑在上面研究 不断地抓头 短段两天 我感觉我的头发都凸了一点了 后来我实在解决不了 于是直接付费请教别人帮我装机 就为了完成最简
  • Jenkins 设置镜像_在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分 Jenkins是一款非常流行的持续集成和部署工具 最近试验了一下Jenkins 发现它是我一段时间以来用过的工具中最复杂的 一个可能的原因是它需要与各种其它工具集成才能完成任务 而集成的方法又各不
  • XML转JavaBean的简单实现

    一个基于JSON的简单的XML转为Bean的方法 之前在做一个WEB SERVICE的交互的时候 写的一个基于JSON的XML转Bean的方法 就把它整理处理 如下 gt pom xml 所有需要的依赖包如下