首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Simple Framework:輕量級 Java XML 物件映射 (XOM) 工具評測

     編輯:Java 相關知識

為什麼需要 Simple?

Java 原生 DOM/SAX/StAX API 複雜冗長;JAXB 配置繁瑣;Apache Betwixt Bug 多、維護停滯。Simple Framework 以 Annotation 驅動、零配置、極簡 API 解決 XML ⇄ Java 物件雙向轉換,官網:simple.sourceforge.net。

快速上手(30 分鐘)

核心類別:org.simpleframework.xml.Serializer、Persister。常用註解:

註解用途
@Root標記根元素,可指定 name
@Element子元素,可設 required、name、type
@AttributeXML 屬性
@ElementList集合/陣列,支援 inline、entry、type
@ElementMapMap 結構

範例 1:基本物件

@Root(name = "example")
public class Example {
    @Element(name = "text") private String text;
    @Attribute(name = "index") private int index;
    @Element(name = "flag") private boolean flag;
    @Element(name = "num", required = false) private Integer num;
    @ElementList(name = "slist", required = false, inline = true) 
    private List<String> slist = new ArrayList<>();

    public Example() {} // 必須有無參建構子
    public Example(String text, int index) { this.text = text; this.index = index; }
    // getter/setter 略
}

// 序列化/反序列化
Serializer serializer = new Persister();
Example ex = new Example("Example message", 123);
File out = new File("outxml/example.xml");
serializer.write(ex, out);
Example in = serializer.read(Example.class, out);
System.out.println(in.getText()); // Example message

輸出 XML:

<example index="123">
  <text>Example message</text>
  <flag>false</flag>
  <slist/>
</example>

範例 2:巢狀物件與集合

@Root public class Customer {
    @Attribute(required = true) private Long id;
    @Element(required = true) private String name;
    @Element(required = false) private Address address;
    @ElementList(required = false, type = Order.class, inline = true)
    private List<Order> orderList = new ArrayList<>();
    // 建構子、getter/setter 略
}

@Root public class Address {
    @Element(required = true) private String code;
    @Element private String street;
    @Element private boolean isopen;
    // ...
}

@Root public class Order {
    @Attribute(required = true) private Long id;
    @Element(required = true) private Date cdate;
    @ElementList(required = false, type = Item.class, inline = true)
    private List<Item> itemList = new ArrayList<>();
    // ...
}

@Root public class Item {
    @Attribute private Long id;
    @Element(required = true) private int num;
    @Element(required = false) private BigDecimal price;
    // ...
}

測試碼:

Customer c = new Customer(111L, "張三");
c.setAddress(new Address("450000", "瑞達路XX#", true));
Order o1 = new Order(1L, new Date());
Order o2 = new Order(2L, new Date());
o1.getItemList().add(new Item(1, 11L));
o2.getItemList().add(new Item(2, 21L));
c.getOrderList().add(o1); c.getOrderList().add(o2);

Serializer serializer = new Persister();
serializer.write(c, new File("outxml/customer.xml"));
Customer in = serializer.read(Customer.class, new File("outxml/customer.xml"));
System.out.println(in.getName()); // 張三

關鍵注意事項

  • 每個 Bean 必須提供 public 無參建構子,否則反序列化會拋出難以理解的異常(官方文件未明確強調)。
  • 支援命名空間、型別轉換器、驗證器擴充。
  • 效能優於 JAXB,Jar 僅 ~300KB,適合嵌入式/行動裝置。

結論

Simple 確實名副其然:API 直覺、文件清晰、功能完整(集合、巢狀、屬性、驗證),是目前 Java XML 映射的最佳輕量選擇之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved