想到Object和XML之间来回搞,我同大多数人同样,想到了XStream,JAXB,XMLBeans 。懒得去折腾,直接上手XStream.指针
不得不说XStream仍是很强大的,可是有一个问题,我查了好两三个小时才搞定,也每一个好的博客给寡人讲讲。code
上代码,先列出实体类,姑且叫订单类吧,set/get方法不赘述。xml
public class Order { private String logisticsId ;//订单号 private String cpCode;//公司编号 private String orderCreateTime;//订单建立时间 private String orderBizType;//订单业务类型 …………
而后我就大大方方的Object2XML了。对象
XStream xStream = new XStream(); String params =xStream.toXML(order);
然而,xml确实是没问题呢,可是xml的头声明把个人包名都带出来了,这个不是我想要的,人家给出的标准格式是<request>……</request>文档
<com.sdk.share.entity.Order> <logisticsId>ET61465890105002</logisticsId> <cpCode>ET6</cpCode> <orderCreateTime>2016-05-20 1:10:10</orderCreateTime> <orderBizType>1</orderBizType> </com.sdk.share.entity.Order>
因而我看到了一丝但愿get
xStream.alias("request",Order.class);
文档上说这个能够更换xml的头声明,然而,也是好用的。博客
<request> <logisticsId>ET61465890105002</logisticsId> <cpCode>ET6</cpCode> <orderCreateTime>2016-05-20 1:10:10</orderCreateTime> <orderBizType>1</orderBizType> </request>
这个问题解决,也就花了两分钟,可是下面这个问题才是重点。it
当对象发过来xml,一样也是已<request>……</request>为xml头声明的,我转对象的时候空指针了,报错的大致意思就是找不到“request”这个类。io
因而我在网上查到了标注这个玩意。class
@XStreamAlias("request") public class Order { private String logisticsId ;//订单号 private String cpCode;//公司编号 private String orderCreateTime;//订单建立时间 private String orderBizType;//订单业务类型 …………
而后我觉得他会跟Spring同样,而后并非,他的转换结果仍是空指针。在千方百计String.replace()还有别的尝试以后,终于找到了这句话。
//提醒xStream扫描指定类底下的标注,默认状况下不会扫描 xStream.processAnnotations(Order.class);
就这一句话,解决了个人问题。
而后我在Object2XML的时候将xStream.alias("request",Order.class);这句话注释掉,加上上面一行代码生出来的XML也是没问题的。
纵观网上那么多XStream的博客,又是对象跟XML互转,又是JSON跟xml互转,又是遍历list的,却没有写出这句话的。