Java对象和XML之间的转换

    下文是在csdn上找到的文章,很方便实用:http://blog.csdn.net/zhouxianli/article/details/2962415

在使用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-1.3.1.jar 和xpp3_min-1.1.3.4.0.jar在classpath中。XPP3是一个非常快的XML拉式转换器工具。如果你不想包含这个依赖,你可以使用标准的JAXP DOM转换器来代替。

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

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

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

猜你喜欢

转载自guard.iteye.com/blog/1982747
今日推荐