为什么Hyperjaxb3会生成RestItem 类?

Why does Hyperjaxb3 generate RestItem classes?

我正在使用 maven-hyperjaxb3-plugin (0.6.1) 从我的 xsd 文件生成域 classes。除了一个 class 之外,其他一切都很好,甚至在我向其添加超过 23 个字段之前,它也能正常工作。

一旦我超过该字段数,它就会为我的 table 命名 ILT 生成两个 classes:一个称为 ILT.java,一个称为 ILTRestItem.java,其中我假设与将这些 classes 与 REST API 一起使用有关(我不打算这样做)。

ILTRestItem class 有编译错误。它对 XmlAdapterUtils.unmarshallJAXBElement 进行了很多调用,错误消息是:

The method marshallJAXBElement(Class, QName, Class, BoundType) in the type XmlAdapterUtils is not applicable for the arguments (Class, QName, Class, String)

我实际上并不太担心这个错误,因为我宁愿它根本就没有创建 ILTRestItem class。另一个(较小的)class 工作正常,我的目标是让 ILT 做同样的事情。

如果我 运行 jaxb2 插件 (maven-jaxb2-plugin) 并使用它来生成 classes 则不会生成 ILTRestItem 并且 classes 是正确的的,但它们当然缺少 JPA 注释。这让我怀疑 Hyperjaxb3 负责生成 ILTRestItem class,但我查看了源代码,希望看到 classes 中有类似 'RestItem' 的东西,并且没有没有。

一个相关的问题是我在这里使用单一 table 继承。 ILT class 和另一个 class (IFT) 使用相同的底层 table(交易),它们都扩展了交易 class。如果我从事务中分离 ILT 并使其成为非继承的 class,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>
...

只要我的字段列表足够短,这就可以了。

有趣的是,一旦您在这里提出问题,答案就会在接下来的 30 分钟内出现。无论如何。我遇到的问题是由于我在 ILT class(生成 ILTRestItem 的字段)和事务 class(它继承自的字段)中定义了相同的字段而触发的。相当合理的是,它试图将其拆分为一个单独的 table 并进行连接。当我从 ILT 中删除该字段时,问题就消失了。我不确定我是如何错过它是由特定领域引起的,我想我可能在升级到最新版本之前就得出了这个结论。