- 浏览: 184807 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
yu505656166:
这个问题是怎么解决的啊?
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题 -
dextersmake:
我的配置和你的差不多,调了有一些效果,但是还不是很满意。
YARN内存使用优化配置 -
kjkhi:
dxb350352 写道怎么用啊,运行完了也不知道取值的方法 ...
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
dxb350352:
怎么用啊,运行完了也不知道取值的方法
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
wanshijian:
相同问题,解决了!
使用cxf的wsdl2java是遇到的问题
在前面已经介绍使用xStream包处理null值的问题,现在我们一起讨论一下对于使用xStream进行反序列化的问题。
这里我们使用的xml模板为:
我们需要四个类,分别为SendXML、Consignee、Consignor和Goods,这里我给出SendXML的源码如下:
之前看了很多其他的介绍没有使用转换器的,但这里我必须需要写转换器实现,否则无法得到结果。
在这里我写了一个类实现Converter接口,如:
在使用到XStream时,需要注册这个转换器,如:
现在基本上就已经满足要求了,但是效率不高。
这里我们使用的xml模板为:
<ShippingOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/DataExchange.Utility.BussinessObject"> <totalCharge>679.08</totalCharge> <totalCount>567</totalCount> <totalWeight>851.21</totalWeight> <agencyPrice>agencyPrice2O305</agencyPrice> <billId>billId408KI</billId> <billingPersonName>billingPersonName2O305</billingPersonName> <branchName>branchName408KI</branchName> <chargeType>chargeType408KI</chargeType> <acceptTime>2011-03-07 09:18:43.0</acceptTime> <checkTime>2011-03-07 09:18:43.0</checkTime> <consigneeCardNO>consigneeCardNO2O305</consigneeCardNO> <consigneeInfomation> <addressTel>addressTel2O305</addressTel> <consigneeCode>consigneeCode2O305</consigneeCode> <consigneeUserID>consigneeUserID2O305</consigneeUserID> <consignmentStatus>consignmentStatus2O305</consignmentStatus> <gatheringAmount>gatheringAmount2O305</gatheringAmount> <gatheringType>gatheringType2O305</gatheringType> <goodsReceiptPlace>goodsReceiptPlace2O305</goodsReceiptPlace> <isReturn>false</isReturn> <linkManName>linkManName2O305</linkManName> <originalEnterprise>originalEnterprise2O305</originalEnterprise> <originalNumber>originalNumber2O305</originalNumber> <remark>remark2O305</remark> <requestedUnloadedDateTime>2011-03-07 09:18:43.0</requestedUnloadedDateTime> <telephoneNumber>telephoneNumber2O305</telephoneNumber> </consigneeInfomation> <consigneeName>consigneeName2O305</consigneeName> <consigneeSignName>consigneeSignName2O305</consigneeSignName> <consignorInfomation> <addressTel>addressTel2O305</addressTel> <consignorCode>consignorCode2O305</consignorCode> <linkManName>linkManName2O305</linkManName> <loadingPlace>loadingPlace2O305</loadingPlace> <telephoneNumber>telephoneNumber2O305</telephoneNumber> </consignorInfomation> <consignorName>consignorName2O305</consignorName> <endStationName>endStationName408KI</endStationName> <goodsInfomations> <GoodsInfomation> <chargeType>中文测试</chargeType> <excursionFreight>344.7</excursionFreight> <freight>911.83</freight> <goodsBar>goodsBar2O305</goodsBar> <goodsBatchNumber>goodsBatchNumber2O305</goodsBatchNumber> <goodsGuid>fd604f4f-163b-4290-93c3-a2256d4f8fe8</goodsGuid> <goodsName>goodsName2O305</goodsName> <goodsSpecification>goodsSpecification2O305</goodsSpecification> <goodsType>goodsType2O305</goodsType> <goodsTypeCode>goodsTypeCode2O305</goodsTypeCode> <grossWeightUnitCode>647.59</grossWeightUnitCode> <grossWeightValue>882.45</grossWeightValue> <insurancePrice>insurancePrice2O305</insurancePrice> <isInsurance>isInsurance2O305</isInsurance> <packageType>packageType2O305</packageType> <packageTypeCode>packageTypeCode2O305</packageTypeCode> <packagesNumber>576</packagesNumber> <remart>remart2O305</remart> <volumeUnitCode>volumeUnitCode2O305</volumeUnitCode> <volumeValue>383.46</volumeValue> </GoodsInfomation> <GoodsInfomation> <chargeType>chargeType2O305</chargeType> <excursionFreight>769.38</excursionFreight> <freight>928.05</freight> <goodsBar>goodsBar2O305</goodsBar> <goodsBatchNumber>goodsBatchNumber2O305</goodsBatchNumber> <goodsGuid>b22a30c3-6a8a-435a-a2f9-3c92ef3ccdf9</goodsGuid> <goodsName>goodsName2O305</goodsName> <goodsSpecification>goodsSpecification2O305</goodsSpecification> <goodsType>goodsType2O305</goodsType> <goodsTypeCode>goodsTypeCode2O305</goodsTypeCode> <grossWeightUnitCode>168.72</grossWeightUnitCode> <grossWeightValue>996.43</grossWeightValue> <insurancePrice>insurancePrice2O305</insurancePrice> <isInsurance>isInsurance2O305</isInsurance> <packageType>packageType2O305</packageType> <packageTypeCode>packageTypeCode2O305</packageTypeCode> <packagesNumber>738</packagesNumber> <remart>remart2O305</remart> <volumeUnitCode>volumeUnitCode2O305</volumeUnitCode> <volumeValue>119.99</volumeValue> </GoodsInfomation> </goodsInfomations> <isInsurance>false</isInsurance> <isRouteRecord>1</isRouteRecord> <labelId>labelId408KI</labelId> <limitTime>2011-03-07 09:18:43.0</limitTime> <packageBillId>packageBillId2O305</packageBillId> <prepayPrice>prepayPrice2O305</prepayPrice> <procedureCharge>procedureCharge2O305</procedureCharge> <remark>remark2O305</remark> <route>route2O305</route> <routePersonName>routePersonName2O305</routePersonName> <sendStationName>sendStationName408KI</sendStationName> <stationName>stationName408KI</stationName> <transferName>transferName408KI</transferName> <travelTime>2011-03-07 09:18:43.0</travelTime> </ShippingOrder>
我们需要四个类,分别为SendXML、Consignee、Consignor和Goods,这里我给出SendXML的源码如下:
public class SendXML { private String billId;// 托运单号 private String labelId;// 票签号 private String isRouteRecord;//记录类型,0为线路员记录单,1为托运单 private String branchName;// 营业网点名称 private String stationName;// 受理站 private String sendStationName;// 发送站点 private String transferName;// 中转站编号 private String endStationName;// 到达站点 private String chargeType;// 收费模式 private String procedureCharge;// 手续费 private String packageBillId;// 打包托运单号 private String agencyPrice;// 代收货款 private String prepayPrice;// 代垫货款 private String totalCharge;// 总金额 private String totalCount;// 总数量 private String totalWeight;// 总重量 private String isInsurance;//是否保价 private Consignee consignee;// 收获方信息 private Consignor consignor;// 装货方信息 private String consigneeCardNO;// 收获人身份证 private String consigneeSignName;// 收获人签名 private Date travelTime;// 运输时间 private Date acceptTime;// 受理时间 private Date checkTime;// 签发时间 private Date limitTime;// 到货时限 private String billingPersonName;//开单人姓名 private String routePersonName;//线路员 private String remark;//备注 private String route;//终点站(使用) private String consigneeName;//收货人姓名 private String consignorName;//发货人姓名 private List<Goods> goodsInfomations;//货物信息 //setter、getter
之前看了很多其他的介绍没有使用转换器的,但这里我必须需要写转换器实现,否则无法得到结果。
在这里我写了一个类实现Converter接口,如:
//这个是反序列化是实现的方法 @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { SendXML sendXML = new SendXML(); while(reader.hasMoreChildren()){ reader.moveDown(); String node = reader.getNodeName(); if (node.indexOf("Time")!=-1) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.0"); Date date = null; try { date = sdf.parse(reader.getValue()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } String temp = node.substring(0, 1).toUpperCase()+node.substring(1); Class[] classes = new Class[1]; classes[0] = Date.class; try { Method m = SendXML.class.getMethod("set"+temp, classes); m.invoke(sendXML, date); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }else if ("consigneeInfomation".equals(node)) { Consignee cgee = new Consignee(); while(reader.hasMoreChildren()){ reader.moveDown(); String node2 = reader.getNodeName(); if ("requestedUnloadedDateTime".equals(reader.getNodeName())) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.0"); Date date = null; try { date = sdf.parse(reader.getValue()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } cgee.setRequestedUnloadedDateTime(date); }else { String temp = node2.substring(0, 1).toUpperCase()+node2.substring(1); try { Class[] classes = new Class[1]; classes[0] = String.class; Method method = Consignee.class.getMethod("set"+temp, classes); method.invoke(cgee, reader.getValue()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } reader.moveUp(); } sendXML.setConsignee(cgee); }else if("consignorInfomation".equals(node)){ Consignor cgor = (Consignor)context.convertAnother(sendXML, Consignor.class); sendXML.setConsignor(cgor); }else if ("goodsInfomations".equals(node)) { List<Goods> list = new ArrayList<Goods>(); while(reader.hasMoreChildren()){ reader.moveDown(); Goods goods = (Goods)context.convertAnother(sendXML, Goods.class); list.add(goods); reader.moveUp(); } sendXML.setGoodsInfomations(list); }else { String temp = node.substring(0, 1).toUpperCase()+node.substring(1); try { Class[] classes = new Class[1]; classes[0] = String.class; Method method = SendXML.class.getMethod("set"+temp, classes); method.invoke(sendXML, reader.getValue()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } reader.moveUp(); } return sendXML; }
在使用到XStream时,需要注册这个转换器,如:
File xmlModel = new java.io.File(filePath); FileInputStream in = new FileInputStream(xmlModel); XStream xStream = new XStream(new DomDriver()); xStream.alias("ShippingOrder", SendXML.class); xStream.registerConverter(new ShippingConverter()); SendXML sendXML = (SendXML)xStream.fromXML(in);
现在基本上就已经满足要求了,但是效率不高。
发表评论
-
大数据处理--倒排索引
2014-06-28 14:08 4396简介 倒排索引源 ... -
大数据处理--BitSet
2014-06-28 11:01 1249java.util.BitSet可以按位存储。计算机中一个字 ... -
大数据处理--BloomFilter
2014-06-28 10:58 916BloomFilter——大规 ... -
hadoop 2.x升级异常
2014-06-19 11:54 22851、通过FileSystem这个API去访问hdfs上面的 ... -
Windows 编译Hadoop的Eclipse插件
2013-07-24 00:53 0http://www.cnblogs.com/fly ... -
log4j指定配置文件路径
2013-07-09 11:15 1933在默认情况下 log4j 会从WEB-INF/cl ... -
使用CXF发布和调用webservice
2013-05-08 16:14 1402依赖的JAR cxf-2.2.10.jar je ... -
Filter、Servlet、Listener区别与联系
2013-04-10 17:41 4184J2EE开发中,经常会使用到Filter、Servlet、L ... -
Apache POI组件使用eventusermodel模式读取Excel文档内容
2013-03-18 17:39 9118package com.test; import ja ... -
CXF之JAX-WS(转)
2012-12-18 17:31 1985CXF详解二 CXF之JAX-WS JAX-WS规范是一组 ... -
分析tomcat假死现象的过程
2012-10-15 15:50 0前段时间在公司遇到一个tomcat运行一段时间后(半个月左右 ... -
spring mail 通过HTTP代理发送邮件
2012-09-24 16:22 6662spring框架中org.spr ... -
多线程实现发送邮件功能
2012-09-14 18:44 11186通过Internet发送邮件,可能会在网络传输上面使用较多的 ... -
使用Spring mail通过socks代理发送邮件
2012-09-14 18:25 7135Spring框架提供了JavaMailSender接口及其实 ... -
plupload 上传组件,后台用java实现
2012-09-06 17:21 11486Plupload 是一个Web浏览器上的界面友好的文件上传模 ... -
POI读取大数据量的Excel文件
2012-09-06 11:58 15054POI读取Excel文件有两种方式,一种是使用usermod ... -
UML类图
2012-08-02 16:35 2044UML类图关系大全 1、关联双向关联:C1-C2:指 ... -
使用cxf的wsdl2java是遇到的问题
2012-03-13 10:50 3902对与同一个wsdl文件,我尝试过使用axis2是可以正常转过来 ... -
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题
2012-03-06 14:02 4696使用spring框架风中的javamail发送邮件,遇到了一些 ... -
J2EE使用ireport做导出PDF操作
2012-03-02 17:21 2694首先,在lib中,加入一下jar: jasperreport ...
相关推荐
xstream中xml与javaBean的互转
从XML字符串反序列化回JavaBean同样简单,使用`fromXML()`方法即可: ```java User deserializedUser = (User) xstream.fromXML(xml); ``` **自定义转换规则** 默认情况下,XStream会根据JavaBean的字段名生成XML...
XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...
XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 Java 对象。在标题和描述中提到的 "xstream-1.3.1.jar" 是 XStream 的一个版本,这个 ...
在Java开发中,数据的序列化与反序列化是一个常见的需求,特别是在持久化存储、网络传输等场景。XStream是一个强大的库,它使得Java对象能够轻易地被转换为XML,反之亦然。这篇博客“xstream 让javabean和xml互相...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
Xstream 是一个 Java 库,用于处理 XML 文件的序列化和反序列化,同时也支持将 JavaBean 转换为 JSON 格式。它的核心理念是通过简单的 API 设计,使得 XML 序列化过程变得简洁,无需额外的映射文件或辅助类。 ### 1...
5. XML反序列化回JavaBean:如果需要从XML恢复JavaBean,可以使用`fromXML()`方法。 ```java Person deserializedPerson = (Person) xstream.fromXML(xml); ``` 这将创建一个新的`Person`对象,其属性与原始对象相同...
// 序列化JavaBean为XML String xml = xstream.toXML(user); System.out.println(xml); // 反序列化XML为JavaBean User deserializedUser = (User) xstream.fromXML(xml); System.out.println("Name: " + ...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。XStream使用起来非常简单,不需要预先生成相关...
与传统的XML序列化方式相比,Xstream的优势在于它无需编写额外的辅助类或映射文件,简化了XML序列化的流程。 #### 二、Xstream基本使用 Xstream的使用非常简单直观,下面通过一个简单的示例来展示如何使用Xstream...
XStream不仅能够将Java对象转换为XML,还可以反向将XML转换回Java对象,极大地简化了对象与XML之间的序列化和反序列化过程。 XStream库是由Johannes Lehtinen创建的一个开源项目,它是基于Java的,可以处理复杂的...
xstream-1.4.2.jar,xpp3_min-1.1.4.jar,xmlpull-1.1.3.1.jar 包括 //XML --> JavaBean, //XML --> JavaBean //JavaBean --> JSON,//JSON--> JavaBean
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
XStream由Johannes Brodbeck开发,它的设计目标是提供一个易于使用且高效的XML序列化框架。它通过简单的API,使得XML和Java对象之间可以进行透明的转换。XStream不仅支持基本数据类型,还能够处理复杂的对象结构,...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
XStream是一款强大的Java库,主要用于XML序列化和反序列化,它使得XML数据与Java对象之间的转换变得简单直观。在“XStream_1.3.chm”这个压缩包中,包含了一个详细的帮助文档(通常CHM是Microsoft的HTML Help格式,...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
通过JAXB,你可以很容易地将JavaBean对象转换为XML,并将XML反序列化回JavaBean。使用JAXB,你需要定义一个XML绑定(@XmlRootElement和@XmlAccessorType等注解)来指定JavaBean的字段如何映射到XML元素。 2. **DOM...
XStream,作为一个强大的Java库,主要用于对象到XML以及XML到对象的序列化和反序列化。标题中的"xstream.rar"是一个压缩包,包含了XStream的核心组件——xstream-1.4.8.jar,以及其依赖的jar包,如xpp3-1.1.4c和...