Простая, структурно типизированная привязка данных XML (без генерации или отражения кода) - PullRequest
2 голосов
/ 15 июля 2010

Я ищу библиотеку Java, которая позволила бы мне преобразовать XML в дерево объектов Java, и наоборот.Существует множество библиотек, которые позволили бы мне связать XML с JavaBeans , сгенерированным каким-либо инструментом генерации кода, однако они мне не нужны (JAXB, JiBX, Castor и т. Д.).

Мне нужен инструмент, который будет использовать файл схемы и файл XML, а затем возвращать комбинацию Map с, List с и Object с способом, аналогичным Простая привязка данных Джексона (когда это возможно, конечно).Джексон предназначен для JSON, а не для XML;и ему не хватает возможности принять файл схемы в учетную запись (потому что схема JSON в настоящий момент слишком незрелая).

Могу ли я адаптировать некоторые существующие инструменты для решения своей проблемы или я должен развернуть свое собственное решение с помощью DOM и XSOM?

Ответы [ 2 ]

1 голос
/ 11 августа 2010

MOXy's Dynamic JAXB

MOXy предлагает динамическую реализацию JAXB. Вы можете загрузиться из схемы XML, и вместо статических классов вы можете взаимодействовать с экземплярами DynamicEntity с помощью общих методов get / set:

FileInputStream xsd = new FileInputStream("src/example/customer.xsd");
DynamicJAXBContext jaxbContext = 
    DynamicJAXBContextFactory.createContextFromXSD(xsd, null, null, null);

FileInputStream xmlInputStream = new FileInputStream("src/example/dynamic/customer.xml");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);

System.out.println(customer.<String>get("name"));

Для получения дополнительной информации см .:

Объекты служебных данных (SDO)

Для этого вы также можете использовать объекты данных службы (JSR-235).

FileReader xsd = new FileReader("customer.xsd");
XSDHelper.INSTANCE.define(xsd, null);

FileReader xml = new FileReader("input.xml");
XMLDocument doc = XMLHelper.INSTANCE.load(xml, null, null);

DataObject customerDO = doc.getRootObject();
int id = customerDO.getInt("id");
DataObject addressDO = customerDO.getDataObject("contact-info/address");

Для получения дополнительной информации см .:

0 голосов
/ 15 июля 2010

Похоже на SOAP. Вариант - Apache Axis (мы часто его используем), но есть и другие реализации.

...