Мне дали устаревший набор XSD для сервисов, предоставляемых моим приложением, которые остро нуждаются в рефакторинге. Поскольку у некоторых потребительских приложений нет команды разработчиков, я не могу изменить результат и схему. Однако я могу делать с реальными файлами все, что захочу.
Вот моя настройка каталога:
- root
- subdir1
- common
- разработка
- subdir2
- common
- разработка
- subdir1
Предположим для простоты, что приращение версии между файлами добавляет элемент в комплексный тип, так что предыдущую версию можно повторно применить как базовый/суперкласс.
Теперь в subdir1/common у меня могут быть Include_v01.xsd и Include_v02.xsd. В subdir1/development у меня может быть svc1_v01.xsd, который использует Include_v01.xsd, и svc1_v02.xsd, который использует Include_v02.xsd.
В Subdir2/common у меня могут быть Include_v02.xsd и Include_v03.xsd. В subdir2/developmen у меня могут быть svc2_v01.xsd, который использует Include_v02.xsd, и svc2_v02.xsd, который использует include_v03.xsd.
У меня ~20 таких подкаталогов. У меня около 1500 файлов XSD в этих каталогах. Каждый xsd может иметь несколько включений, которые сами могут иметь несколько включений, которые сами могут иметь несколько включений и т. д.
В конечном счете, я хотел бы реорганизовать их в их наиболее простую форму, где у меня будет, например, только одна копия Include_v02.xsd, и где Include_v02.xsd фактически строится на основе Include_v01.xsd, а не является полностью отдельной копией. . Да какой-то придурок просто скопировал файл, переименовал его и добавил одно поле. Затем он скопировал его в каждый подкаталог, в котором он будет использоваться.
Еще более важно иметь возможность генерировать классы Java в аналогичной структуре.
Прямо сейчас лучшее, что я могу сделать, это запустить xjc для каталогов и скомпилировать схему каждой службы в отдельный пакет, поэтому теперь у меня есть тонны копий объекта Include_v02 в различных пакетах Java. Я должен сделать это таким образом, потому что схема не версионировалась и не изменялась между версиями. Тот же идиот просто скопировал файл, переименовал его и добавил новый элемент, сохранив корневой элемент и никаких других отличительных признаков.
Это сложная задача, и я бы согласился на какой-то способ легко копировать/объединять объекты Java или даже просто копировать между идентичными объектами Java в разных пакетах.
Файлы эпизодов, как указано в здесь, не похоже, что это было бы лучше, чем скрипт, который я использую для генерации вещей сейчас, поскольку мне пришлось бы очень тщательно вычислять каждый корневой элемент, учитывая используемую многоуровневую вложенность.
РЕДАКТИРОВАТЬ ============================= Если бы у меня было в Include_v01.xsd следующее:
<complexType name="cmplxtp">
<complexContent><sequence>
<element name="st1" type="string"/>
</complexContent></sequence>
</complexType>
а в Include_v02.xsd у меня было что-то вроде
<complexType name="cmplxtp">
<complexContent><sequence>
<element name="st1" type="string"/>
<element name="st2" type="string"/>
</complexContent></sequence>
</complexType>
хотелось бы какую-нибудь комбинацию
либо XSD рефакторинг, чтобы быть
Include_v01.xsd тот же Include_v02.xsd
OR
Все отдельные элементы (сложные или простые), оставленные в Include_v01.xsd Include_v02 для включения Include_v01.xsd, с добавлением только новых элементов
OR
два класса Java
package pack1;
class cmplxtp {
public String st1;
}
а также
package pack2;
class cmplxtp extends pack1.cmplxtp {
public String st2;
}
Классы Java являются для меня наиболее важными, но все, что помогает достичь этого, было бы выдающимся.
Если все это невозможно, просто или того стоит, я также был бы более чем благодарен за какой-то простой способ копирования идентичных объектов из одного в другой, если они существуют в разных пакетах. Я просто очень хочу упростить свою кодовую базу, у меня около 160 сервисов, каждый со многими версиями, и каждый versoin может включать ОДИНАКОВЫЙ ТОЧНЫЙ файл. Это означает, что в моем сгенерированном коде у меня может быть 300 или более определений одного и того же класса, но в разных пакетах из-за скопированных включений.