繁体   English   中英

为什么Hyperjaxb3会生成RestItem类?

[英]Why does Hyperjaxb3 generate RestItem classes?

我正在使用maven-hyperjaxb3-plugin(0.6.1)从我的xsd文件生成域类。 除了一个类,其他所有东西都运行良好,甚至在我添加23个以上字段之前,它都可以正常工作。

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

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

XmlAdapterUtils类型的方法marshallJAXBElement(Class,QName,Class,BoundType)不适用于参数(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>
...

只要我的字段列表足够短,这就能完成所有工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM