JAXB工具类

JAXB工具类 xml转为java对象 java对象转为xml JAXB工具类 xml转为java对象 java对象转为xml ,本人亲测,可以使用!!! 立即下载

JXVB是一款由Java开发的框架,用于对xml进行一些操作。

使用JAXB的原因是这个项目中使用到大量的第三方接口,而这些第三方接口需要使用xml作为请求,所以自然而然地学习了JAXB,并且结合了HttpClient完成了一个通用的工具类,不了解JAXB和HttpClient的同学请自行google学习。

  • XmlClientUtil

public class XmlClientUtil {

    /**
     * @param url
     * @param xmlContent
     * @auther: Arong
     * @description: 发送xml请求到server端, 返回xml的String内容
     * @return: java.lang.String
     * @date: 2019/3/2 15:29
     */
    public static String sendPostWithXml(String url, String xmlContent) {

        //创建httpclient工具对象
        //HttpClient client = new HttpClient();
        CloseableHttpClient client = HttpClients.createDefault();
        //创建post请求方法
//        PostMethod myPost = new PostMethod(url);
        HttpPost myPost = new HttpPost(url);
        //设置请求超时时间
        // client.setConnectionTimeout(3000 * 1000);
        String responseString = null;
        try {
            //设置请求头部类型
            myPost.setHeader("Content-Type", "text/xml");
            myPost.setHeader("charset", "utf-8");
//            myPost.setRequestHeader("Content-Type", "text/xml");
//            myPost.setRequestHeader("charset", "utf-8");
            //设置请求体,即xml文本内容,一种是直接获取xml内容字符串,一种是读取xml文件以流的形式
            StringEntity xmlParams = new StringEntity(xmlContent, "utf-8");
            myPost.setEntity(xmlParams);
//            myPost.setRequestBody(xmlString);
            CloseableHttpResponse response = client.execute(myPost);
            //只有请求成功200了,才做处理
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                //获取返回的xml信息成String
                responseString = EntityUtils.toString(response.getEntity(), "utf-8");
                //System.out.println(body);
//                InputStream inputStream = myPost.getResponseBodyAsStream();
//                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
//                StringBuffer stringBuffer = new StringBuffer();
//                String str = "";
//                while ((str = br.readLine()) != null) {
//                    stringBuffer.append(str);
//                }
//                responseString = stringBuffer.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return responseString;
    }


    /**
     * @param params 变长参数,约定第一个参数为xmlContent,第二个为url,第二个为空即使用默认地址
     * @auther: Arong
     * @description: 将URL转化为PMS URL
     * @return: java.lang.String
     * @date: 2019/3/2 19:24
     */
    public static String getMd5Url(String... params) {
        //基础地址
        String baseUrl = "http://pmsnotify.gshis.com/DataExchange";
        //md5地址
        String md5Url = "";
        //16位秘钥
        String secureKey = PmsConfig.secretKey;
        //集团id(酒店id)
        String grpId = PmsConfig.grpid;
        //渠道,默认为C01
        String channel = PmsConfig.channel;
        //以上三者+完整的xml请求生成md5标识
        String sign = MD5Util.getMd5(new StringBuffer(secureKey).append(grpId).append(channel).append(params[0]).toString());
        //判断是否有确定地址
        if (params.length >= 2) {
            //有确定地址,返回确定地址的md5加密版本
            md5Url = new StringBuffer(params[1])
                    .append("?grpId=")
                    .append(grpId)
                    .append("&channel=")
                    .append(channel)
                    .append("&sign=")
                    .append(sign)
                    .toString();
        }
        //使用基础地址加密
        md5Url = new StringBuffer(baseUrl)
                .append("?grpId=")
                .append(grpId)
                .append("&channel=")
                .append(channel)
                .append("&sign=")
                .append(sign)
                .toString();

        return md5Url;
    }

    /**
     * @param object
     * @auther: Arong
     * @description: 将Object转化为XML字符串
     * @return: java.lang.String
     * @date: 2019/3/2 21:28
     */

    public static String convertObjectToXML(Object object) {
        Class<?> aClass = object.getClass();
        Marshaller marshaller = null;
        //用字符写入流获取字符串
        StringWriter sw = new StringWriter();
        try {
            //执行器
            JAXBContext context = JAXBContext.newInstance(aClass);
            //获得编组用于序列化
            marshaller = context.createMarshaller();
            //格式化xml输出
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            // marshaller.marshal(object,System.out);
            marshaller.marshal(object, sw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return sw.toString();
    }

    @Deprecated
    public static Object convertXMLToObject(String xml, Object object) {
        Class<?> aClass = object.getClass();
        Object xmlObject = null;
        try {
            JAXBContext context = JAXBContext.newInstance(aClass);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            StringReader sr = new StringReader(xml);
            xmlObject = unmarshaller.unmarshal(sr);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return xmlObject;
    }

    @Deprecated
    public static Object getObject(Object xmlRequestObject, Object xmlResponseObject) {

        String xmlContent = convertObjectToXML(xmlRequestObject);
        String md5Url = getMd5Url(xmlContent);
        String xmpResponse = sendPostWithXml(md5Url, xmlContent);
        System.out.println("xmlContent:" + xmlContent);
        System.out.println("xmlResponse:" + xmpResponse);
        Object o = convertXMLToObject(xmpResponse, xmlResponseObject);
        return o;
    }

    /**
     * @param javaBean
     * @auther: Arong
     * @description: 传入封装了请求参数的javaBean,
     * 在此方法内将其简化为xml并发送带xml参数的md5请求,然后将获得的响应转化为JSONObject
     * @return: net.sf.json.JSONObject
     * @date: 2019/3/4 12:16
     */
    public static JSONObject postWithRequestJavaBean(Object javaBean) {
        //1、将JavaBean转化为XML
        String xmlContent = convertObjectToXML(javaBean);
        //2、确定xmlContent不为空则发送md5请求获取xmlResponse
        Optional.ofNullable(xmlContent)
                .orElseThrow(() -> new RuntimeException("xmlContent为空"));
        System.out.println("xml request:------------------\n" + xmlContent);
        //获取到xml请求后的xmlResponse
        String xmlResponse = XmlClientUtil.sendPostWithXml(XmlClientUtil.getMd5Url(xmlContent), xmlContent);
        System.out.println("xml response:------------------\n" + xmlResponse);
        //初始化XMLSerializer
        XMLSerializer xmlSerializer = new XMLSerializer();
        //将xmlResponse解析为jsonString
        String jsonString = xmlSerializer.read(xmlResponse).toString();
        //确定jsonString不为空则将其解析为JSONObject
        JSONObject jsonObject = Optional.ofNullable(jsonString)
                .map(s -> {
                    //不为空将其解析为JSONObject
                    JSONObject jobj = JSONObject.fromObject(jsonString);
                    return jobj;
                })
                .orElseThrow(() -> new RuntimeException("jsonString为空!"));
        //异常检查
        ExceptionHander.handlerException(jsonObject);

        return jsonObject;


    }
}
jaxb工具类 java对象转换xml&xml;解析成java对象,主要是针对最近写的博文 jaxb工具使用的工具类 立即下载

相关推荐

自用JAXB工具类,String类型XML和node节点和java类互转

自用JAXB工具类,java内置,比XSteam快一倍多,内容比较齐全,下载即用,傻瓜式导入

JAXB简单应用

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成,也方便生成,可以更好进行JavaBean和xml、JSON直接的互相转换

yyp0719的博客 2107

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 901

xml转换

import java.io.ByteArrayInputStream; import java.io.StringReader; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.util.HashMap; im...

G_whang的博客 341

OPNET卫星节点仿真避坑指南:为什么你的STK轨道文件导入后位置不对?

本文深入解析OPNET卫星节点仿真中STK轨道文件导入后位置异常的常见问题,揭示坐标系差异(ECI与ECF)、时间基准不匹配等关键因素。通过修改.SA文件头标识、统一时间基准等解决方案,帮助工程师避免仿真失真,提升卫星通信系统仿真的准确性。特别适用于STK与OPNET协同工作的卫星网络仿真场景。

weixin_30335575的博客 602

基于STM32开发板的USB MIDI键盘实现

在本文中,我们介绍了如何使用STM32开发板和相应的软件工具来实现USB MIDI键盘。通过配置STM32CubeMX和编写相应的源代码,我们能够将STM32开发板转换为一个功能齐全的USB MIDI设备。我们将使用STM32开发板和相应的软件工具来实现这一功能,并提供相应的源代码供参考。此时,您应该可以使用STM32开发板作为USB MIDI键盘,并在按键按下时听到相应的音符。在STM32CubeMX中,选择适当的STM32型号,并启动一个新的项目。然后,将生成的可执行文件烧录到STM32开发板中。

2301_79326616的博客 1591

使用JAXB实现JAVA对象和XML字符串的互相转换实例

使用JAXB实现JAVA对象和XML字符串的互相转换实例,非常实用的技术。

动感超人的专栏 5万+

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

算法大师! 1172

Java对象与XML文件互转的几个小技巧(使用jaxb工具类)

采用Jaxb工具类实现Java对象与XML文件互转时,有一些注意的地方,记录如下: 1、model类需要加注解 @XmlRootElement 否则报错; 2、如果mode类的属性与XML节点名称不同,使用注解 @XmlElement(name="xxx") 指定;【注意】该注解必须加到getter方法上,加到属性上会报错!!! 3、集合类型,使用注解 @XmlElementWrap

走过的足迹 3525

多模态大模型助力AI人工智能领域的智能决策

我们的目的是深入了解多模态大模型是怎样在AI人工智能领域帮助做出智能决策的。范围涵盖了多模态大模型的基本概念、工作原理、在不同场景下的应用,以及未来的发展方向等。接下来,我们会先介绍多模态大模型和智能决策的核心概念,再讲讲它们之间的关系。然后说说多模态大模型在智能决策中的算法原理和操作步骤,用数学公式来解释一下。接着通过一个项目实战案例让大家更直观地感受。之后看看多模态大模型在实际中的应用场景,推荐一些学习的工具和资源。最后探讨未来的发展趋势和挑战,进行总结并提出一些思考题。多模态大模型。

AIGC应用创新大全的博客 919

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

Jaxb工具类

为什么80%的码农都做不了架构师?>>> ...

weixin_34408624的博客 151

Allegro如何导出和导入器件模型Signal_Model操作指导

在用Allegro做PCB设计的时候,通常需要给器件加上Signal_Model,在做等长的时候用到的非常频繁。如下图,需要把R7002的Signal_Model导入到另外一块没有给R7002加好模型的BRD中。Allegro除了可以给器件添加模型,还支持从一块加好模型的BRD导入到另外一块BRD中,如何导出和导入器件模型Signal_Model操作指导。

weixin_54787054的博客 1897

常用工具类之十二 Jaxb转换xml工具类,生产优化版

相对之前写的进行简化和优化 Jaxb工具类 生产版,使用JDK自带xjc命令从xsd生成的java类,包含了xsd验证,安全转换xml. xjc Xx.xsd -p com.taylor.jaxb com.taylor.jaxb为生成的java类的包名 或者 java -Dfile.encoding=UTF-8 -cp "C:\Program Files\Java\jdk1.8.0_191\lib\tools.jar" com.sun.tools.internal.xjc.Driver -p com.

taylor的博客 589

AI应用架构师收藏:大规模AI系统AIOps智能运维的4个落地案例

本文精选互联网、金融、制造、电信四大行业的大规模AI系统AIOps落地案例,覆盖云原生AI平台、风控AI系统、工业AI质检、5G网络AI优化等典型场景。行业背景与系统规模:业务目标、AI系统架构、运维挑战;AIOps解决方案设计:数据采集层→分析层→决策层的全栈架构,技术栈选型与理由;核心技术实现细节:异常检测算法、根因分析模型、自动化恢复流程(含Python代码示例);实施效果与经验总结:关键指标对比、踩坑教训、架构师视角的最佳实践。

AI天才研究院 859

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jaxb解析xml工具类

[quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] [code="java"] package com.nnk.flowrecharge.common; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; impor...

潇潇雨东的博客 340

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

为JAXB书写工具类

看代码,应该很好理解的: @XmlRootElement(name="schema",namespace="http://www.w3.org/2001/XMLSchema") public class Schema { private Element element; public Element getElement() { return element; } @Xml

636

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Jaxb 工具类

[code="java"]package zj.simpleframework.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExcept...

iteye_6994的博客 195

JAXB xml处理工具类

1、首先创建Bean @XmlRootElement注解标注当前类作为根节点 @XmlAccessorType注解标注绑定到XML文件的属性,@XmlRootElement默认绑定public属性 @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Bean{ @XmlElement private Property property; } @XmlAccessorType...

qq_33790106的博客 425

Java对xml的生成及解析工具类

1、Jaxb工具类如下. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.*; /**...

sundy_fly的博客 1646

eclipselink,MOXy,JAXB,Json工具类

从String中转成JSON对象 最近使用json来传递对象,JAXB,基于JAVA annotation,因此代码简洁,所以选用支持JAXB的MOXy,以前一直用google Gson,这个适合手动解析JSON,它在一些很大的JSON对象上速度很快,但是不利于快速开发,且维护复杂,代码不友好。 Gson中的fromJson 方法也可以解析简单对象,如{"type":0,"score":...

记得别人忘了自己 357

JAXB工具类实现xml和bean相互转化

转载的,同事已经测试过,可以实现。 转载地址:https://blog.youkuaiyun.com/5iasp/article/details/38492825 测试类: package com.yanek.test; import java.util.ArrayList; import java.util.List; import com.yanek.test.JaxbUtil.C...

weixin_40805079的博客 622

JAXB轻松转换xml对象和java对象

实体类如下: package com.cn.entity; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; i

期待破茧成蝶 4605
上一篇: MySQL基础笔记(15)-搭建基于GTID的MySQL主从复制架构
下一篇: Linux(4)-vim的常用快捷键
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值