単体テストと TDD 用のモック データを作成するために、POJO オブジェクトを外部エンティティ (XML、YAML、構造化テキスト、または書き込みと保守が簡単なもの) にバインドする方法が必要です。以下は私が試したいくつかのライブラリですが、それらの主な問題は、私が (少なくとも 3 か月以上) Java 1.4 に固執していることです。代わりに、可能な限り低いオーバーヘッドと事前設定 (たとえば、スキーマや DTD の使用など) を使用し、複雑な XML を使用せずに使用できるものについての洞察が欲しいです。私が本当に気に入っているライブラリは次のとおりです (ただし、1.4 では動作しないか、コンストラクタをサポートしていないようです。セッターが必要です)。
RE-JAXB (または、Really Easy Java XML バインディング)
http://jvalentino.blogspot.com/2008/07/in-response-to-easiest-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 には適していません。
jYaml 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 解析を処理するカスタム コードを作成する必要があります。
データ記述子を書くことはできる限り避けたいということを覚えておいてください。
何か提案はありますか?