我需要一种将 POJO 对象绑定到外部实体的方法,该实体可以是 XML、YAML、结构化文本或任何易于编写和维护的东西,以便为单元测试和 TDD 创建 Mock 数据。以下是我尝试过的一些库,但它们的主要问题是我被困在 Java 1.4 上(至少 3 个月以上)。我想了解我可以使用什么,尽可能低的开销和前期设置(例如使用模式或 DTD),并且没有复杂的 XML。这是我真正喜欢的库(但显然不适用于 1.4 或不支持构造函数 - 你必须有设置器):
RE-JAXB(或真正简单的 Java XML 绑定)
http://jvalentino.blogspot.com/2008/07/in-response-to-easyest-java-xml-binding.html http://sourceforge.net/projects/rejaxb/
无缝绑定这个:
<item>
<title>Astronauts' Dirty Laundry</title>
<link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
<description>Compared to earlier spacecraft, the International Space
Station has many luxuries, but laundry facilities are not one of them.
Instead, astronauts have other options.</description>
<pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
<guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
</item>
对此:
@ClassXmlNodeName("item")
public class Item {
private String title;
private String link;
private String description;
private String pubDate;
private String guid;
//getters and settings go here...
}
使用:
Rss rss = new Rss();
XmlBinderFactory.newInstance().bind(rss, new File("Rss2Test.xml"));
问题:它依赖于注解,所以对 Java 1.4 没有好处
yaml http://jyaml.sourceforge.net/
无缝绑定:
--- !user
name: Felipe Coury
password: felipe
modules:
- !module
id: 1
name: Main Menu
admin: !user
name: Admin
password: password
对此:
public class User {
private String name;
private String password;
private List modules;
}
public class Module {
private int id;
private String name;
private User admin;
}
使用:
YamlReader reader = new YamlReader(new FileReader("example.yaml"));
reader.getConfig().setClassTag("user", User.class);
reader.getConfig().setClassTag("module", Module.class);
User user = (User) reader.read(User.class);
问题:它不适用于构造函数(因此对不可变对象没有好处)。我必须更改我的对象或编写自定义代码来处理 YAML 解析。
请记住,我想尽可能避免 - 编写数据描述符,我想要一些“正常工作”的东西。
你有什么建议吗?