使用xfire webservice接口开发,obj与xml相互转换好用工具类,不需要写大量的转换代码,亲测可用

webservice接口开发,旧工程中存在使用xfire开发的接口,对象转换为xml和xml转换为对象的时候需要些大量的代码,工作量很大。现在提供一个比较好的对象转换为xml的工具。

<!-- https://mvnrepository.com/artifact/commons-betwixt/commons-betwixt --><dependency><groupId>commons-betwixt</groupId><artifactId>commons-betwixt</artifactId><version>0.8</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.jdom</groupId><artifactId>jdom2</artifactId><version>2.0.6</version></dependency>

旧代码:对象转xml 及 xml转对象写法,需要写大量的转换代码, 如下:

Ret 对象

package com.gblfy;import org.jdom2.Element;
import org.jdom2.Namespace;public class Ret {private String code = ""; // 如果成功返回true,失败返回falseprivate String message = ""; // 如果成功返回操作成功,失败则返回失败原因private static final String RET_FORMAT = "<Ret><code>%s</code><message>%s</message></Ret>";public String packBody() {return String.format(RET_FORMAT, this.getCode(), this.getMessage());}public void unpackBody(Element element) {Namespace nameSpace = element.getNamespace();this.setCode(element.getChildText("code", nameSpace));this.setMessage(element.getChildText("message", nameSpace));}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

StepMindModel 对象

package com.gblfy;import lombok.Data;@Data
public class StepMindModel {private String stepMind;private String stepName;
}

Response对象

package com.gblfy;import lombok.Data;import java.util.List;@Data
public class Response {List<StepMindModel> list;Ret ret;
}

现在完全可以使用apache提供的包进行转换,使用jar:commons-betwixt-0.8.jar

工具转换演示代码如下:

package com.gblfy;import lombok.extern.slf4j.Slf4j;
import org.apache.commons.betwixt.io.BeanReader;
import org.apache.commons.betwixt.io.BeanWriter;import java.io.*;
import java.util.ArrayList;
import java.util.List;@Slf4j
public class XmlParseUtil {//根标签  根据需求定义private static final String XML_ROOT_NODE_NAME = "response";//xml header头部public static final String XML_HEADER = "<?xml version='1.0' encoding='UTF-8' ?>";
//    public static final String XML_HEADER = "";/*** 将XML字符串 转换成 对象** @param strInMsg : XML内容* @param clazz* @return*/public static Object xml2Obj(String strInMsg,@SuppressWarnings("rawtypes") Class clazz) {BeanReader beanReader = new BeanReader();Object parse = null;StringReader xmlReader = new StringReader(strInMsg);beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanReader.getBindingConfiguration().setMapIDs(false);try {beanReader.registerBeanClass(XML_ROOT_NODE_NAME, clazz);parse = beanReader.parse(xmlReader);} catch (Exception e) {log.error("", e);}return parse;}/*** 将 对象 转换成 XML字符串** @param inObj* @return*/public static String obj2xml(Object inObj) {StringWriter sw = new StringWriter();BeanWriter beanWriter = new BeanWriter(sw);sw.write(XML_HEADER);try {beanWriter.setEndOfLine("");beanWriter.getBindingConfiguration().setMapIDs(false);beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanWriter.write(XML_ROOT_NODE_NAME, inObj);} catch (Exception e) {log.error("", e);}return sw.toString();}/*** 将XML文件转换成 对象** @param fileName* @param clazz* @return*/public static Object file2Object(String fileName, Class clazz) {String fileContent = file2String(fileName);return xml2Obj(fileContent, clazz);}/*** 将XML文件转换成 对象** @param file* @param clazz* @return*/public static Object file2Object(File file, Class clazz) {String fileContent = file2tring(file);return xml2Obj(fileContent, clazz);}/*** 读取文件全部内容** @param fileName* @return*/private static String file2String(String fileName) {File file = new File(fileName);return file2tring(file);}/*** 读取文件全部内容** @param file* @return*/private static String file2tring(File file) {String encoding = "ISO-8859-1";Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];try {FileInputStream in = new FileInputStream(file);in.read(filecontent);in.close();} catch (FileNotFoundException e) {log.error("", e);} catch (IOException e) {log.error("", e);}try {return new String(filecontent, encoding);} catch (UnsupportedEncodingException e) {log.error("", e);return null;}}//----------------------------测试方法-------------------------------public static void main(String[] args) {Ret obj = new Ret();obj.setCode("true");obj.setMessage("成功");//对象转换为xml:<response><code>true</code><message>成功</message></response>String xmlString = XmlParseUtil.obj2xml(obj);System.out.println("对象转换为xml:" + xmlString);Ret obj2 = (Ret) XmlParseUtil.xml2Obj(xmlString, Ret.class);//xml转换为对象:true==成功System.out.println("xml转换为对象:" + obj2.getCode() + "==" + obj2.getMessage());Response response = new Response();List<StepMindModel> list = new ArrayList<StepMindModel>();StepMindModel model = new StepMindModel();model.setStepMind("同意");model.setStepName("三级部门经理审核");StepMindModel model2 = new StepMindModel();model2.setStepMind("同意");model2.setStepName("二级部门经理审核");list.add(model);list.add(model2);response.setList(list);response.setRet(obj);//对象转换为xml: <?xml version='1.0' encoding='UTF-8' ?><response><list><StepMindModel><stepMind>同意</stepMind><stepName>三级部门经理审核</stepName></StepMindModel><StepMindModel><stepMind>同意</stepMind><stepName>二级部门经理审核</stepName></StepMindModel></list><ret><code>true</code><message>成功</message></ret></response>System.out.println("对象转换为xml:" + XmlParseUtil.obj2xml(response));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud Alibaba迁移指南(二):零代码替换 Eureka

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后&#xff0c;我们开始制作《Spring Cloud Alibaba迁移指南》系列文章&#xff0c;向开发者提供更多的技术选型方案&#xff0c;并降低迁移过程中的技术难度。 第二篇&#xff0c;Spring Cloud Alibaba 实现了 Sp…

云+X案例展 | 民生类:京东云突破数据中心光互联瓶颈

本案例由京东云投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;进而推动整个“云行业”的健康发展。随着数字化的进程&#…

Linux查看文件夹大小

Linux查看文件夹大小 du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)大小&#xff0c;并按文件大小排序 du -sk filename 查看指定文件大小

UI2Code智能生成Flutter代码--整体设计篇

背景: 随着移动互联网时代的到来&#xff0c;人类的科学技术突飞猛进。然而软件工程师们依旧需要花费大量精力在重复的还原UI视觉稿的工作。 UI视觉研发拥有明显的特征&#xff1a;组件&#xff0c;位置和布局&#xff0c;符合机器学习处理范畴。能否通过机器视觉和深度学习等手…

如何成为优秀的技术主管?你要做到这三点

阿里妹导读&#xff1a;技术主管&#xff0c;又叫「技术经理」&#xff0c;英文一般是 Tech Leader &#xff0c;简称 TL。随着工作经验的不断积累&#xff0c;能力的不断提升&#xff0c;每个人都有机会成为Team Leader。然而在机会到来前&#xff0c;我们必须提前做好准备&am…

达摩院2020十大科技趋势发布:云成IT技术创新中心

2020年第一个工作日&#xff0c;“达摩院2020十大科技趋势”发布。这是继2019年之后&#xff0c;阿里巴巴达摩院第二次预测年度科技趋势。 回望2019年的科技领域&#xff0c;静水流深之下仍有暗潮涌动。AI芯片崛起、智能城市诞生、5G催生全新应用场景……达摩院去年预测的科技…

SpringBoot Mybatisplus 多数据源使用

文章目录一、mybatisplus3.x1. 依赖2. 启动类添加注解3. 添加多数据源注解4. yml5. 测试类6. 源码地址为了适配新的需求&#xff0c;需要同时支持mysql和oracle数据库操作多数据源&#xff0c;因此项目中集成dynamic-datasource-spring-boot-starter,支持很多场景。 例如&#…

mysql查询每月、每天订单金额

最近项目需要统计每天的金额&#xff0c;就写了这样的sql 下面是统计每天的金额&#xff08;fifth_gen_maintain_fee &#xff09;&#xff0c;主要是根据day&#xff08;&#xff09;函数&#xff0c;按照创建日期进行分组&#xff0c;每月的话day换成month函数就行了 SELEC…

数据流被污染?数据质量不高?蚂蚁金服数据资产管理平台了解一下

今年年初&#xff0c;蚂蚁金服ATEC城市峰会在上海举办。金融智能专场分论坛上&#xff0c;蚂蚁金服数据平台部高级数据技术专家李俊华做了主题为《蚂蚁金服数据治理之数据质量治理实践》的精彩分享。 演讲中&#xff0c;李俊华介绍了蚂蚁金服数据架构体系的免疫系统——数据质…

努力≠上进!那些“熬夜”持续精进的人有多可怕!

经常听到一些同学说&#xff1a;某个公司薪资上调30-50%&#xff0c;我可以跳槽入吗&#xff1f;最近收到几个比较好的offer&#xff01;该去哪家&#xff1f;纠结&#xff01;目前岗位和环境对自己成长非常慢&#xff01;更看不到公司的前景特别迷茫&#xff01;想成为人工智能…

MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述

最近的MySQL8.0.14版本增加了其第一个并行查询特性&#xff0c;可以支持在聚集索引上做SELECT COUNT()和check table操作。本文简单的介绍下这个特性。 用法 增加了一个session级别参数: innodb_parallel_read_threads 要执行并行查询&#xff0c;需要满足如下条件(ref: row…

Google 插件总览

有道翻译 Vue.js devtools bilibili哔哩哔哩下载助手 哔哩哔哩助手&#xff1a;bilibili.com 综合辅助扩展 提供方&#xff1a;https://bilibili-helper.github.io Infinity 新标签页 (Pro) Google 翻译 PostWoman Http接口调试插件 jsonView jsonViewer json formatter 格…

java计算增长率

**计算月增长率**//sameMonth 本月金额//lastMonth 上月金额public static String getAnalysisData(Float sameMonth, Float lastMonth) {if (lastMonth < sameMonth) {//如果下个数大于上个数&#xff0c;则增长率 为 正float result (sameMonth - lastMonth) / lastMonth…

详解CPU几个重点基础知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 骏马金龙责编 | 阿秃关于CPU和程序的执行1、程序的运行过程&#xff0c;实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程。当程序要执行的部分被装载到内存后&#xff0c;CPU要从内存中取出指令&#xff0c;然后指令…

Spring Cloud Alibaba迁移指南(三):极简的 Config

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后&#xff0c;我们开始制作《Spring Cloud Alibaba迁移指南》系列文章&#xff0c;向开发者提供更多的技术选型方案&#xff0c;并降低迁移过程中的技术难度。 第一篇&#xff1a;一行代码从 Hystrix 迁移到 Sent…

非web项目并且项目文件多java项目 使用tomcat发布的方式

文章目录1. 创建配置文件2. 新建一个web项目2. 新项目结构调整4. 项目结构整理5. 添加jdk和jar6. 等待编译1. 创建配置文件 在tomcat的cof下面创建一下目录 conf\Catalina\localhost这个xml文件的名称建议和项目名一样&#xff0c;作用是&#xff0c;浏览器访问的时候项目名称…

为拯救爸妈朋友圈,达摩院造了“谣言粉碎机”

生命不可能从谎言中开出灿烂的鲜花。 前几天&#xff0c;母上大人给我发了条消息&#xff0c;再三叮嘱帮忙扩散&#xff0c;随手解救癌症患者。 “速转&#xff01;科学家发现&#xff1a;一味中药48小时可杀死60%癌细胞!” 回复框里&#xff0c;我打了一段长长的反驳文字。…

亲历!不要痴迷蓝牙耳机了,出门选这个准没错,99W+人的选择

01有一种耳机啊它是真的不适合在长途火车上使用那就蓝牙耳机除非你带充电宝还有一种耳机啊它是真的不适合丢那就是带有充电仓的耳机因为充电仓丢了这个耳机基本上就废了02这不&#xff0c;我就经历了&#xff0c;活生生的例子出差的路上在火车上把耳机充电仓给弄丢了只剩孤零零…

Spring Cloud Alibaba迁移指南(四):零代码兼容 Api-Gateway

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后&#xff0c;我们开始制作《Spring Cloud Alibaba迁移指南》系列文章&#xff0c;向开发者提供更多的技术选型方案&#xff0c;并降低迁移过程中的技术难度。 第一篇&#xff1a;一行代码从 Hystrix 迁移到 Sent…