Мне нужен способ привязки объектов POJO к внешнему объекту, который может быть XML, YAML, структурированный текст или что-либо простое в написании и обслуживании, чтобы создавать Mock-данные для модульного тестирования и TDD. Ниже приведены некоторые библиотеки, которые я пробовал, но основные проблемы с ними заключались в том, что я застрял (как минимум на 3 месяца) в Java 1.4. Я хотел бы получить представление о том, что я мог бы использовать вместо этого, с минимальными накладными расходами и предварительной настройкой (например, используя схемы или DTD) и без сложного XML. Вот библиотеки, которые мне действительно нравятся (но они, очевидно, не работают с 1.4 или не поддерживают конструкторы - у вас должны быть сеттеры):
RE-JAXB (или действительно простые 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.
Помните, что я хотел бы, насколько это возможно, избегать написания дескрипторов данных, я хотел бы что-то, что "просто работает".
У вас есть предложения?