XMLBeans — как обрабатывать почти идентичные устаревшие XSD?

Я использую XMLBeans для создания клиентского кода Java из двух очень похожих XSD. Классы, сгенерированные XMLBeans, входят в два параллельных пакета. Затем я извлекаю данные из базы данных, чтобы взаимодействовать со сгенерированными классами и создавать два (опять же, почти идентичных) выходных XML-файла. Несмотря на то, что XSD примерно на 95% одинаковы, между ними нет определенной связи - никакого наследования или чего-то еще. К сожалению, эти устаревшие XSD используются годами, и мне не разрешено их изменять.

Моя проблема заключается в следующем: несмотря на то, что большинство данных и структур в двух XML-файлах абсолютно одинаковы, я не могу понять, как избежать тонн дублирующегося кода, чтобы поместить данные в два независимых набора классов, сгенерированных XMLBeans. . Я могу создать общий набор бизнес-объектов для перехода между DAO и XML-структурами. Но мне все равно пришлось бы сопоставлять каждый из этих объектов с соответствующими сгенерированными типами XML, а это кажется невероятно утомительным и неэффективным.

Я не хочу изменять сгенерированный код Java XMLBeans (например, для реализации общего интерфейса) и не могу изменять XSD. Я просмотрел шаблоны, такие как адаптер и мост, но я не думаю, что они помогут мне избежать дублирования кода/усилий. Есть ли элегантное дизайнерское решение, которое мне не хватает?


person Devon Biere    schedule 26.03.2014    source источник
comment
Трудно определить, какую часть вы можете изменить, а какую нет. Некоторый код даст лучшее представление. Вы пробовали JAXB?   -  person Gaurav Varma    schedule 27.03.2014
comment
+1 Просто у нас такая же проблема, и было бы неплохо иметь достойное решение.   -  person Peter Keller    schedule 28.03.2014


Ответы (1)


Возможно, вы могли бы использовать XmlCursor для общего добавления контента в похожие узлы, см. Как добавить узел в XML с помощью XMLBeans XmlObject

person Peter Keller    schedule 28.03.2014
comment
Это кажется очень громоздким, но я так и не смог найти лучшего решения. - person Devon Biere; 10.04.2015