xjc и тонны файлов эпизодов

Я пытался использовать JAXB-RI, и это xjc для создания классов для моих XSD (когда я говорю свои XSD, я имею в виду ужасно сделанные XSD. Подробнее об этом позже).

Первая проблема, с которой я столкнулся, это то, что у меня всего два пространства имен во всей настройке. Несмотря на это, одна и та же вещь определяется несколько раз в отдельных файлах с немного разными именами, но в XSD нечего различать. Например, у меня может быть два XSD

bar_v01_00.xsd

<xsd:schema xmlns="http://www.foo.com/" targetNamespace="http://www.foo.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="foo">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:element name="elem1" type="xsd:string" />
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

bar_v02_00.xsd

<xsd:schema xmlns="http://www.foo.com/" targetNamespace="http://www.foo.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:element name="foo">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:element name="elem1" type="xsd:string" />
                <xsd:element name="elem2" type="xsd:string" />
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Итак, одно и то же имя, одно и то же пространство имен, просто разные файлы. Я обхожу это, указав два разных пакета, поэтому bar_v01_00.xsd будет входить

package www.foo.com.bar.Major01.Minor00;

и bar_v02_00.xsd будет компилироваться в

package www.foo.com.bar.Major02.Minor00;

Неэлегантно, конечно, но эффективно. Теперь эти файлы могут иметь включения/импорты, каждый из которых может иметь еще больше включений/импортов, некоторые из которых могут иметь глубину 32 уровня! По большому счету, эти включения являются включениями по какой-то причине, то есть они используются повторно несколько раз.

У меня есть> 120 сервисов, каждый из которых имеет XSD запроса и ответа, и, возможно, половина из них имеет несколько версий, как указано выше. Мне удалось реорганизовать это до 636 файлов, что было немалым подвигом.

Я не хочу, чтобы 300 копий одних и тех же общих вещей были сгенерированы в отдельные пакеты, поэтому я попытался использовать файлы .episode. Это работает, но только до уровня 3 глубоких включений. Если я попытаюсь включить более 3 эпизодов, xjc умрет. Я попытался поместить эпизоды в файл jar, а затем понял, что таким образом он ищет только один эпизод. Если я попытаюсь объединить содержимое эпизодов в один файл, это тоже не сработает.

Я могу что-то сделать, или я застрял здесь?


person Josh Winkler    schedule 22.06.2012    source источник


Ответы (1)


Я нашел лучший способ добавить все файлы зависимых эпизодов в один большой для включения. Требует некоторой работы, некоторого синтаксического анализа и некоторых размышлений, но все это автоматизировано и работает.

person Josh Winkler    schedule 06.12.2012