XStreamでPOJOからXML/JSONへの変換

6142 ワード


 
XStreamを使用すると、マッピングなしで多くのJavaオブジェクトのシーケンス化が可能になります.生成されたXMLではオブジェクト名が要素名となり、クラスの文字列がXMLの要素内容を構成します.XStreamシーケンス化されたクラスを使用してSerializableインタフェースを実装する必要はありません.XStreamはデータバインドツールではなくシーケンス化ツールであり、XMLまたはXML Schema Definition(XSD)ファイルからクラスを生成することはできません.
XStreamには、他のシーケンス化ツールと比較して3つの特徴があります.
  • XStreamは、シーケンス化/逆シーケンス化されたクラスのフィールドの可視性に関心を持たない.
  • シーケンス化/逆シーケンス化クラスのフィールドにはgetterメソッドとsetterメソッドは必要ありません.
  • シーケンス化/逆シーケンス化のクラスには、デフォルトのコンストラクション関数は必要ありません.

  • クラスを変更する必要はありません.XStreamを使用すると、サードパーティ製クラスを直接シーケンス化/逆シーケンス化できます.
     
    XStream(http://xstream.codehaus.org)によるPOJO<<-->>XML/JSONの相互変換を紹介します.
     
    上コード例
    import java.util.ArrayList;
    import java.util.List;
    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    public class Test {
    
    	public static class Customer {
    		private int custId;
    		private String custName;
    		private List<Order> orders;
    
    		public int getCustId() {
    			return custId;
    		}
    
    		public void setCustId(int custId) {
    			this.custId = custId;
    		}
    
    		public String getCustName() {
    			return custName;
    		}
    
    		public void setCustName(String custName) {
    			this.custName = custName;
    		}
    
    		public List<Order> getOrders() {
    			return orders;
    		}
    
    		public void setOrders(List<Order> orders) {
    			this.orders = orders;
    		}
    	}
    
    	public static class Order {
    		private int orderId;
    		private String orderName;
    		private Product[] products;
    
    		public int getOrderId() {
    			return orderId;
    		}
    
    		public void setOrderId(int orderId) {
    			this.orderId = orderId;
    		}
    
    		public String getOrderName() {
    			return orderName;
    		}
    
    		public void setOrderName(String orderName) {
    			this.orderName = orderName;
    		}
    
    		public Product[] getProducts() {
    			return products;
    		}
    
    		public void setProducts(Product[] products) {
    			this.products = products;
    		}
    	}
    
    	public static class Product {
    		private int prodId;
    		private String prodName;
    		private double prodPrice;
    
    		public int getProdId() {
    			return prodId;
    		}
    
    		public void setProdId(int prodId) {
    			this.prodId = prodId;
    		}
    
    		public String getProdName() {
    			return prodName;
    		}
    
    		public void setProdName(String prodName) {
    			this.prodName = prodName;
    		}
    
    		public double getProdPrice() {
    			return prodPrice;
    		}
    
    		public void setProdPrice(double prodPrice) {
    			this.prodPrice = prodPrice;
    		}
    	}
    
    	public static void main(String[] args) {
    
    		Product p1 = new Product();
    		p1.setProdId(20100001);
    		p1.setProdName("  ");
    		p1.setProdPrice(8888);
    		Product p2 = new Product();
    		p2.setProdId(20100002);
    		p2.setProdName("  ");
    		p2.setProdPrice(6000);
    		Product[] prods1 = new Product[] { p1, p2 };
    
    		Order order1 = new Order();
    		order1.setOrderId(101);
    		order1.setOrderName("   ");
    		order1.setProducts(prods1);
    		List<Order> orders = new ArrayList<Order>();
    		orders.add(order1);
    		Customer customer = new Customer();
    		customer.setCustId(100001);
    		customer.setCustName("  ");
    		customer.setOrders(orders);
    
    		XStream xstream = new XStream(new DomDriver());
    		xstream.alias("customer", Customer.class);
    		xstream.alias("order", Order.class);
    		xstream.alias("product", Product.class);
    
    		String xml = xstream.toXML(customer);//     xml   
    
    		System.out.println(xml); //    xml    
    
    		System.out.println("---------------------JSON-----------------------------");
    
    		// JSON
    		XStream xstream4JSON = new XStream(new JsonHierarchicalStreamDriver());
    
    		String json = xstream4JSON.toXML(customer);//     JSON   
    
    		System.out.println(json); //    JSON    
    
    	}
    
    }
     
     
     
     印刷結果
     
     
    <customer>
      <custId>100001</custId>
      <custName>  </custName>
      <orders>
        <order>
          <orderId>101</orderId>
          <orderName>   </orderName>
          <products>
            <product>
              <prodId>20100001</prodId>
              <prodName>  </prodName>
              <prodPrice>8888.0</prodPrice>
            </product>
            <product>
              <prodId>20100002</prodId>
              <prodName>  </prodName>
              <prodPrice>6000.0</prodPrice>
            </product>
          </products>
        </order>
      </orders>
    </customer>
    ---------------------JSON-----------------------------
    {"Zbingo.grid.lookup.Test$Customer": {
      "custId": 100001,
      "custName": "  ",
      "orders": [
        {
          "orderId": 101,
          "orderName": "   ",
          "products": [
            {
              "prodId": 20100001,
              "prodName": "  ",
              "prodPrice": 8888.0
            },
            {
              "prodId": 20100002,
              "prodName": "  ",
              "prodPrice": 6000.0
            }
          ]
        }
      ]
    }}