Почему 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, проблема исчезла. Я не уверен, как я пропустил, что это было вызвано определенной областью, я думаю, что, возможно, пришел к такому выводу, прежде чем я обновил до последней версии.