0

我正在使用 maven-hyperjaxb3-plugin (0.6.1) 从我的 xsd 文件生成域类。除了一个类之外,一切都运行良好,甚至在我添加超过 23 个字段之前都运行良好。

一旦超过该字段数,它就会为我的名为 ILT 的表生成两个类:一个称为 ILT.java,一个称为 ILTRESTItem.java,我认为这与将这些类与 REST API 一起使用有关(我不这样做)不打算这样做)。

ILTResItem 类有编译错误。它对 XmlAdapterUtils.unmarshallJAXBElement 做了很多调用,错误消息是:

XmlAdapterUtils 类型中的方法 marshallJAXBElement(Class, QName, Class, BoundType) 不适用于参数(Class, QName, Class, String)

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

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

一个相关点是我在这里使用单表继承。ILT 类和另一个类 (IFT) 使用相同的基础表 (Transaction),它们都扩展了 Transaction 类。如果我从 Transaction 中分离 ILT 并使其成为非继承类,则 ILTResItem 不再生成。

对 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>
...

只要我的字段列表足够短,这一切都会奏效。

4

1 回答 1

0

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

于 2017-03-07T00:21:11.030 回答