我们在请求国家系统经常会遇到webservice 接口他们一般传输使用xml 所以使用xml就会遇到和实体接互相转换以及实体与xml
不对应怎么处理。接下来提供一种解决方案 他可以处理xml 和实体随意转换!

  • 建立实体(模拟发票实体)
package com.dairuijie.test.bean;import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;/*** * @ClassName: InvoiceBean* @Description:TODO(这里用一句话描述这个类的作用)* @author: drj* @date: 2019年8月11日 下午5:36:39* * @Copyright: 2019**/
@XStreamAlias("invoice")
public class InvoiceBean {/*** 发票id*/@XStreamAlias("invoiceId")private Long invoiceId;/*** 发票号码*/@XStreamAlias("invoiceNum")private String invoiceNum;/*** 发票代码*/@XStreamAlias("invoiceCode")private String invoiceCode;/*** 商品名称*/@XStreamImplicit(itemFieldName="invoiceDetail")private List<InvoiceDetail> invoiceDetail;public Long getInvoiceId() {return invoiceId;}public void setInvoiceId(Long invoiceId) {this.invoiceId = invoiceId;}public String getInvoiceNum() {return invoiceNum;}public void setInvoiceNum(String invoiceNum) {this.invoiceNum = invoiceNum;}public String getInvoiceCode() {return invoiceCode;}public void setInvoiceCode(String invoiceCode) {this.invoiceCode = invoiceCode;}public List<InvoiceDetail> getInvoiceDetail() {return invoiceDetail;}public void setInvoiceDetail(List<InvoiceDetail> invoiceDetail) {this.invoiceDetail = invoiceDetail;}@Overridepublic String toString() {return "InvoiceBean [invoiceId=" + invoiceId + ", invoiceNum=" + invoiceNum + ", invoiceCode=" + invoiceCode+ ", invoiceDetail=" + invoiceDetail + "]";}}
package com.dairuijie.test.bean;import java.math.BigDecimal;import com.thoughtworks.xstream.annotations.XStreamAlias;/*** * @ClassName:  InvoiceDetail   * @Description:TODO(这里用一句话描述这个类的作用)   * @author: drj * @date:   2019年8月11日 下午8:14:50   *     * @Copyright: 2019 **/
@XStreamAlias("invoiceDetail")
public class InvoiceDetail {/*** 货物名称*/@XStreamAlias("goodsName")private String goodsName;/*** 单位*/@XStreamAlias("unit")private String unit;/*** 单价*/@XStreamAlias("price")private BigDecimal price;public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public String getUnit() {return unit;}public void setUnit(String unit) {this.unit = unit;}public BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}@Overridepublic String toString() {return "InvoiceDetail [goodsName=" + goodsName + ", unit=" + unit + ", price=" + price + "]";} }
  • XStreamConvertor xml工具类
package com.dairuijie.test.utils;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;import org.springframework.oxm.xstream.XStreamMarshaller;import com.dairuijie.test.bean.InvoiceBean;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.zl.vtax.base.BusinessException;
/*** * @ClassName:  XStreamConvertor   * @Description:TODO(xml 工具类)   * @author: drj * @date:   2019年8月11日 下午10:35:52   *   * @param <T>  * @Copyright: 2019 **/
public class XStreamConvertor<T> {private static XStreamConvertor<?> instance = null;//单例模式private static Map<String, XStreamMarshaller> xstreamCache = new ConcurrentHashMap<String, XStreamMarshaller>();private static final String XML_TAG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";private static final String GBK = "UTF-8";static {instance = new XStreamConvertor<>();}public String toXml(T pojo) throws BusinessException {String clzName = pojo.getClass().getName();XStreamMarshaller xstreamMarshaller = xstreamCache.get(clzName);if (xstreamMarshaller == null) {xstreamMarshaller = new XStreamMarshaller();xstreamMarshaller.setEncoding(GBK);xstreamMarshaller.setStreamDriver(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));xstreamCache.put(clzName, xstreamMarshaller);}XStream xStream = xstreamMarshaller.getXStream();XStream.setupDefaultSecurity(xStream);//防止出現 xStream:Security framework of XStream not initialized, XStream is probably vulnerable.xStream.allowTypes(new Class[]{InvoiceBean.class});//允许转换对象xStream.processAnnotations(pojo.getClass());return XML_TAG + xStream.toXML(pojo).replaceAll("<tiripPackage>", "").replaceAll("&quot;", "\"");}@SuppressWarnings("unchecked")public T fromXml(Class<T> clz, String xml) {String clzName = clz.getName();XStreamMarshaller xstreamMarshaller = xstreamCache.get(clzName);if (xstreamMarshaller == null) {xstreamMarshaller = new XStreamMarshaller();xstreamMarshaller.setEncoding(GBK);xstreamMarshaller.setStreamDriver(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));xstreamCache.put(clzName, xstreamMarshaller);}XStream xStream = xstreamMarshaller.getXStream();xStream.setClassLoader(clz.getClassLoader());xStream.processAnnotations(clz);return (T) xStream.fromXML(xml);}@SuppressWarnings("unchecked")public static XStreamConvertor<Object> getInstance() {return (XStreamConvertor<Object>) instance;}
}
  • 测试类
package com.dairuijie.test.utils;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;import com.dairuijie.test.bean.InvoiceBean;
import com.dairuijie.test.bean.InvoiceDetail;/*** * @ClassName: XmlBeanUtils* @Description:TODO(这里用一句话描述这个类的作用)* @author: drj* @date: 2019年8月11日 下午9:01:31* * @Copyright: 2019**/
public class XmlBeanUtils {public static void main(String[] args) {List<InvoiceDetail> list = new ArrayList<InvoiceDetail>();InvoiceDetail detail = new InvoiceDetail();detail.setGoodsName("牛肉");detail.setPrice(new BigDecimal("99"));detail.setUnit("元");list.add(detail);InvoiceBean bean = new InvoiceBean();bean.setInvoiceCode("99999");bean.setInvoiceId(999L);bean.setInvoiceNum("99999");bean.setInvoiceDetail(list);@SuppressWarnings("rawtypes")XStreamConvertor xmlUtils = XStreamConvertor.getInstance();@SuppressWarnings("unchecked")String xmlstr = xmlUtils.toXml(bean);System.out.println("实体转xml:" + xmlstr);@SuppressWarnings("unchecked")InvoiceBean invoiceBean = (InvoiceBean) xmlUtils.fromXml(InvoiceBean.class, xmlstr);System.out.println("xml转实体: " + invoiceBean);}
}
  • 结果
实体转xml:<?xml version="1.0" encoding="UTF-8"?><invoice><invoiceId>999</invoiceId><invoiceNum>99999</invoiceNum><invoiceCode>99999</invoiceCode><invoiceDetail><goodsName>牛肉</goodsName><unit>元</unit><price>99</price></invoiceDetail>
</invoice>
xml转实体: InvoiceBean [invoiceId=999, invoiceNum=99999, invoiceCode=99999, invoiceDetail=[InvoiceDetail [goodsName=牛肉, unit=元, price=99]]]

xml与实体互相转换相关推荐

  1. java实体类转换xml_简单实体类和xml文件的相互转换方法

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

  2. C#实现json、xml与实体类互相转换

    首先是json与实体类之间的的转换,现有如下json数据: {"Content": "中午12点开会","ResultCode": &quo ...

  3. 实体类转换成Xml格式实例

    最近在家公司实习,接触到了报关系统,有些海关报文是需要Xml格式来进行拼接的,所以就开始学起了将实体类转换成Xml格式的写法. 具体Xml是什么大家可以从这个链接点进去了解:Xml教程 我们在进行数据 ...

  4. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  5. XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  6. c# XML和实体类之间相互转换(序列化和反序列化)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  7. Xml外部实体注入漏洞(XXE)与防护

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

  8. XXE(XML外部实体注入)详解

    1. XXE漏洞描述 XXE(XML External Entity Injection)又称为"XML外部实体注入漏洞". 当允许引用外部实体时,通过构造恶意内容,就可能导致任意 ...

  9. java xml 实体类_java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  10. XML,Object,Json分析转换Xstream采用

    XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库.主要用 ...

最新文章

  1. java.lang.NullPointerException空指针问题
  2. 2021年春季学期-信号与系统-第五次作业参考答案-第八小题
  3. java实现简单窗体小游戏----球球大作战
  4. java类方法不可见_使java方法仅对特定类可见
  5. XMind助你快速解决问题
  6. 窥探Swift编程之强大的Switch
  7. yum如何安装特定版本的gcc_linux下如何升级python
  8. truncate python是删除文件内容吗_Python 文件 truncate() 方法
  9. 文件路径和模块路径、nodemon工具
  10. python直方图与x轴对应不起来_Python Matplotlib绘图与x轴标签正确对齐并匹配系列和错误的颜色...
  11. 【shell】shell-grep -v 排除多个输出结果
  12. 解决Docker for window与VMware虚拟机同时安装,造成虚拟机网络不通以及无法启动问题...
  13. Installing third-party firmware on x3-55 letv (by quqi99)
  14. 常用函数的幂级数展开式
  15. JAVA操作Excel 可配置,动态 生成复杂表头 复杂的中国式报表表头
  16. 当谈判处于下风怎么办?五大策略助你逆势翻盘
  17. XShell上传下载文件
  18. mybatis源码解析(一)
  19. 空间坐标转化——三维转二维
  20. ADAMoeacle预言机竞争优势|支持广域网节点喂价|节点挖ADAM

热门文章

  1. ubuntu下载Linux 内核,ubuntu下载linux内核源码
  2. 不出门也能拍好证件照
  3. 邮政社招笔试题库_中国邮政招聘笔试:笔试练习题1
  4. 基于python+django框架+Mysql数据库的新闻信息管理系统设计与实现
  5. Linux内核学习路线 有入门到深入
  6. java虚拟机执行过程
  7. AutoCAD2012从入门到精通中文视频教程 第16课 渐变填充,椭圆弧命令(个人收藏)
  8. 关于form提交后展示遮罩及显示进度条gif问题
  9. 聊天机器人闲聊语料 - 1
  10. 【取词翻译软件】CopyTranslator(deepin20可用的复制即翻译的外文辅助阅读方案)