Java对象和XML之间的转换

在使用WebService时,可以传递复杂的对象,如本例中的Policy,但是WebService的实现经常有问题,为了规避这个问题,我们可以采用传一个XML串的方式变通实现。其中最主要的问题,Java对象和XML之间的转换通过XStream可以很好地解决。

XStream是一个开源项目,一套简单实用的类库,用于序列化对象与XML对象之间的相互转换。将XML文件内容解析为一个对象或将一个对象序列化为XML文件。XStream可以用于JDK1.3以上的版本使用。

其使用方式非常简单,下面给出一个例子:

  1. package cn.com.sinosoft.test;
  2. import java.io.Serializable;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import com.thoughtworks.xstream.XStream;
  6. public class XStreamTest {
  7.     public static void main(String[] args) { 
  8.         Policy policy = createTestPolicy();
  9.         XStream xstream = new XStream( ); 
  10.         //xstream.alias("policy", Policy.class);
  11.         //xstream.alias("item", Item.class);
  12.         String xml = xstream.toXML(policy); 
  13.         System.out.println(xml);
  14.         
  15.         Policy newPolicy = (Policy)xstream.fromXML(xml); 
  16.         System.out.println(xstream.toXML(newPolicy));
  17.     }
  18.     private static Policy createTestPolicy(){
  19.         Policy policy = new Policy();
  20.         policy.setPolicyNo("测试保单号");
  21.         List items = new ArrayList();
  22.         policy.setItems(items);
  23.         Item item = new Item();     
  24.         item.setItemCode("001");
  25.         item.setItemCode("基本信息");
  26.         items.add(item);
  27.         item = new Item();
  28.         item.setItemCode("002");
  29.         item.setItemCode("扩展信息");
  30.         items.add(item);        
  31.         return policy;
  32.     }
  33. }
  34. class Policy implements Serializable{ 
  35.     private static final long serialVersionUID = 1L;
  36.     private String policyNo;
  37.     private List items;
  38.     public String getPolicyNo() {
  39.         return policyNo;
  40.     }
  41.     public void setPolicyNo(String policyNo) {
  42.         this.policyNo = policyNo;
  43.     }
  44.     public List getItems() {
  45.         return items;
  46.     }
  47.     public void setItems(List items) {
  48.         this.items = items;
  49.     }
  50. }
  51. class Item implements Serializable{ 
  52.     private static final long serialVersionUID = 1L;
  53.     private String itemCode;
  54.     private String itemName;
  55.     public String getItemCode() {
  56.         return itemCode;
  57.     }
  58.     public void setItemCode(String itemCode) {
  59.         this.itemCode = itemCode;
  60.     }
  61.     public String getItemName() {
  62.         return itemName;
  63.     }
  64.     public void setItemName(String itemName) {
  65.         this.itemName = itemName;
  66.     }
  67. }

其中,实例化时需要xstream-[version].jar and xpp3-[version].jar在classpath中。XPP3是一个非常快的XML拉式转换器工具。如果你不想包含这个依赖,你可以使用标准的JAXP DOM转换器来代替。

 

:这个类的简单设计是为了实现通用操作的。为了实现更复杂的操作你可以选择自己创建出不同方式。

 

为了使用XStream来更精简的输出XML,你可以为自定义的类创建别名到XML的元素名的映射。这是使用XStream唯一需要的映射的,甚至这个都是可选的。

  1. xstream.alias("policy", Policy.class); 

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java中,可以使用一些库来实现xml、OMElement和Java对象之间的相互转换,以下是一些常见的库和示例: 1. JAXB(Java Architecture for XML Binding):JAXB可以将Java对象序列化为XML文档,也可以将XML文档反序列化为Java对象。示例代码如下: ```java // 将Java对象转换XML文档 JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(student, new File("student.xml")); // 将XML文档转换Java对象 JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Student student = (Student) unmarshaller.unmarshal(new File("student.xml")); ``` 2. Axiom:Axiom是一个轻量级的XML对象模型,可以将OMElement和Java对象相互转换。示例代码如下: ```java // 将Java对象转换为OMElement OMFactory factory = OMAbstractFactory.getOMFactory(); OMElement studentElement = AxiomHelper.toOMElement(factory, student); // 将OMElement转换Java对象 Student student = AxiomHelper.fromOMElement(studentElement, Student.class); ``` 3. XStreamXStream是一个快速、简单的Java对象序列化和反序列化库,可以将Java对象序列化为XML文档,也可以将XML文档反序列化为Java对象。示例代码如下: ```java // 将Java对象转换XML文档 XStream xstream = new XStream(); xstream.alias("student", Student.class); String xml = xstream.toXML(student); // 将XML文档转换Java对象 XStream xstream = new XStream(); xstream.alias("student", Student.class); Student student = (Student) xstream.fromXML(xml); ``` 以上是一些常见的库和示例,具体使用哪个库取决于实际需求和个人喜好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值