Почему Hyperjaxb3 генерирует классы RestItem?

Я использую maven-hyperjaxb3-plugin (0.6.1) для генерации классов домена из моего файла xsd. Все работает очень хорошо, за исключением одного класса, и даже это работает, пока я не добавлю более 23 полей.

Как только я превышаю это количество полей, он генерирует два класса для моей таблицы с именем ILT: один называется ILT.java, а другой называется ILTRestItem.java, который, как я предполагаю, как-то связан с использованием этих классов с REST API (что-то, что я надеваю не планирую делать).

Класс ILTRestItem имеет ошибки компиляции. Он делает много вызовов XmlAdapterUtils.unmarshallJAXBElement, и сообщение об ошибке:

Метод marshallJAXBElement(Class, QName, Class, BoundType) в типе XmlAdapterUtils не применим для аргументов (Class, QName, Class, String)

Я на самом деле не слишком беспокоюсь об этой ошибке, потому что я бы предпочел, чтобы она просто не создавала класс ILTRestItem вообще. Другие (меньшие) классы работают нормально, и моя цель состоит в том, чтобы ILT делал то же самое.

Если я запускаю плагин jaxb2 (maven-jaxb2-plugin) и использую его для генерации классов, то не создается сгенерированный ILTRestItem, и классы правильные, но в них, конечно, отсутствуют аннотации JPA. Это заставляет меня заподозрить, что Hyperjaxb3 отвечает за генерацию класса ILTRestItem, но я просмотрел исходный код, надеясь увидеть классы с чем-то вроде RestItem, а их нет.

Одним из важных моментов является то, что я использую наследование одной таблицы здесь. Класс ILT и другой класс (IFT) используют одну и ту же базовую таблицу (Transaction), и они оба расширяют класс Transaction. Если я отсоединяю ILT от Transaction и делаю его не наследуемым классом, ILTRestItem больше не генерирует.

Много поисков как JAXB2, так и HyperJaxb3, и я не нахожу никаких ссылок на RestItem или просто почему он генерируется (или кто из них это делает). Я надеюсь, что есть некоторый переключатель конфигурации, чтобы отключить генерацию RestItem, но пока я не вижу его.

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

Также: JPA 2.1 и соответствующий фрагмент maven:

    <plugin>
        <groupId>org.jvnet.hyperjaxb3</groupId>
        <artifactId>maven-hyperjaxb3-plugin</artifactId>
        <version>0.6.1</version>
        <dependencies>
            <dependency>
                <groupId>com.xyz</groupId>
                <artifactId>ims-core-partner</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
        <executions>
            <execution>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <variant>jpa2</variant>
            <extension>true</extension>
                    <args>
                        <arg>-extension</arg>
                        <arg>-XtoString</arg>
                        <arg>-Xannotate</arg>
                    </args>
        </configuration>
    </plugin>

Зависимость состоит в том, чтобы получить несколько пользовательских аннотаций в этом прикреплении, используя annox.

Наконец, вот соответствующий фрагмент из моего файла xsd:

<complexType name="ILT">
    <xsd:annotation>
        <xsd:appinfo>
            <hj:entity>
            <orm:inheritance strategy="SINGLE_TABLE"/>
            <orm:discriminator-value>ILT</orm:discriminator-value>
            </hj:entity>
        </xsd:appinfo>
    </xsd:annotation>
   <xsd:complexContent>
    <xsd:extension base="tns:Transaction">
        <xsd:sequence>
        <element name="iltType" type="tns:ItemType">
        </element>
        <element name="investmentOrderId" type="string">
        </element>
...

Это все работает, пока мой список полей достаточно короток.

1 ответ

Решение

Забавно, что, как только вы зададите вопрос, ответ появится в следующие 30 минут. В любом случае. Проблема, с которой я столкнулся, была вызвана тем, что я определил одно и то же поле в классе ILT (тот, который генерирует ILTRestItem) и класс Transaction (тот, от которого он наследует). Вполне разумно было попытаться разделить это на отдельную таблицу и выполнить объединение. Когда я удалил это поле из ILT, проблема исчезла. Я не уверен, как я пропустил, что это было вызвано определенной областью, я думаю, что, возможно, пришел к такому выводу, прежде чем я обновил до последней версии.

Другие вопросы по тегам