【问题标题】:Setting hyperjaxb mapping to force implementation of external interface设置 hyperjaxb 映射以强制实现外部接口
【发布时间】:2015-10-08 19:10:41
【问题描述】:

我有一个 hyperjaxb xsd 文件和绑定配置。如何强制我生成的类实现在另一个工件中声明的自定义接口?我知道我可以让他们通过使用扩展另一个类

    <xjc:superClass name="com.sample.jpa.entities.BaseEntity"/>

但我还需要他们实现另一个接口。我怎样才能做到这一点?

【问题讨论】:

  • 检查JAXB2-Basics中的继承插件。
  • 这个可以和hyperjaxb一起使用吗?

标签: java maven jpa jaxb hyperjaxb


【解决方案1】:

免责声明:HyperjaxbJAXB2-Basics 的作者在这里。

您可以将JAXB2-Basics 中的Inheritance pluginHyperjaxb 一起使用。你既可以扩展一个类,也可以实现一个接口。该插件还可以处理泛型,因此您甚至可以执行&lt;inheritance:implements&gt;com.acme.foo.MyInterface&amp;lt;com.acme.foo.SomeClass&amp;gt;&lt;/inheritance:implements&gt; 之类的操作。

简短指南:

  • 通过您的pom.xml 中的&lt;arg&gt;-Xinheritance&lt;/arg&gt; 启用插件。比如:

        <plugin>
            <groupId>org.jvnet.hyperjaxb3</groupId>
            <artifactId>maven-hyperjaxb3-plugin</artifactId>
            <configuration>
                <!--result>mappingFiles</result-->
                <roundtripTestClassName>org.jvnet.hyperjaxb3.ejb.tests.cuone.RoundtripTest</roundtripTestClassName>
                <args>
                    <arg>-Xinheritance</arg>
                </args>
            </configuration>
        </plugin>  
    

    JAXB2-Basics 是 Hyperjaxb 的依赖项,因此您很可能不需要在这里做任何其他事情。请参阅example(对于注释插件,但这并不重要)。

  • 使用inheritance:extendsinheritance:implements 自定义元素自定义您的复杂类型。示例:

    <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
        <jaxb:bindings node="xsd:complexType[@name='WillBeMadeCloneableType']">
            <inheritance:implements>java.lang.Cloneable</inheritance:implements>
        </jaxb:bindings>
    </jaxb:bindings>
    

应该是这样的。

【讨论】:

  • 完美!我怎样才能在全球范围内实现它?将继承应用于我的 xsd 中定义的所有类型?
  • @AlfredoA。只需通过 XPath 应用于许多节点。见stackoverflow.com/questions/12043255/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2015-10-23
相关资源
最近更新 更多