为什么Hyperjaxb3会生成RestItem类?

时间:2017-03-06 23:39:11

标签: hibernate jaxb jaxb2 hyperjaxb

我使用maven-hyperjaxb3-plugin(0.6.1)从我的xsd文件生成域类。除了一个类之外,一切都很好,甚至可以正常工作,直到我添加超过23个字段为止。

一旦我超过了那个数量的字段,它就会为我的名为ILT的表生成两个类:一个名为ILT.java,一个名为ILTRestItem.java,我假设这与使用REST API的这些类有关(我不打算做的事情。)

ILTRestItem类有编译错误。它对XmlAdapterUtils.unmarshallJAXBElement进行了大量调用,错误信息是:

  

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

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

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

一个相关点是我在这里使用单表继承。 ILT类和另一个类(IFT)使用相同的基础表(Transaction),它们都扩展了Transaction类。如果我从Transaction中分离ILT并使其成为非继承类,则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 个答案:

答案 0 :(得分:0)

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