XStreamでPOJOからXML/JSONへの変換
XStreamを使用すると、マッピングなしで多くのJavaオブジェクトのシーケンス化が可能になります.生成されたXMLではオブジェクト名が要素名となり、クラスの文字列がXMLの要素内容を構成します.XStreamシーケンス化されたクラスを使用してSerializableインタフェースを実装する必要はありません.XStreamはデータバインドツールではなくシーケンス化ツールであり、XMLまたはXML Schema Definition(XSD)ファイルからクラスを生成することはできません.
XStreamには、他のシーケンス化ツールと比較して3つの特徴があります.
クラスを変更する必要はありません.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
}
]
}
]
}}