如何通过 xsdtojava 在自动生成的 jaxb 元素上添加接口?

mem*_*und 5 java xml jaxb xjc

我想interface为由jaxb和自动生成的类添加一个超级xsdtojava

问题:我只能在根元素上添加接口(我不想要,但只是为了测试目的)。

我要应用继承的元素是thelistelement.

xsd我还没有控制的。

<xs:schema>
    <xs:element name="myRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="thelist">
                   <xs:complexType>
                      <xs:sequence>
                         <xs:element name="thelistelement" maxOccurs="unbounded">
                    ...
Run Code Online (Sandbox Code Playgroud)

绑定文件:

<jaxb:bindings    
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    jaxb:extensionBindingPrefixes="xjc inheritance"
    jaxb:version="2.1">

    <!-- this works -->
    <jaxb:bindings schemaLocation="xsd/my.xsd">
        <jaxb:bindings node="//xs:element[@name='myRequest']">
                    <inheritance:implements>MyInterface</inheritance:implements>
        </jaxb:bindings>
    </jaxb:bindings>

    <!-- this does NOT work -->
    <jaxb:bindings schemaLocation="xsd/my.xsd">
        <jaxb:bindings node="//xs:element[@name='thelistelement']">
                    <inheritance:implements>MyInterface</inheritance:implements>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

<extensionArg>-Xinheritance</extensionArg>.

输出应该是:

...
List<Thelistelement> thelist;

class Thelistelement implements MyInterface {

}
Run Code Online (Sandbox Code Playgroud)

但是列表元素类中缺少该接口。那么为什么它适用于根元素myRequest呢?

mem*_*und 3

我必须/xs:complexType向节点添加一个。不知道为什么会这样。

重要的是要注意复杂类型之前的单斜杠!

<jaxb:bindings schemaLocation="xsd/my.xsd">
    <jaxb:bindings node="//xs:element[@name='thelistelement']/xs:complexType">
                <inheritance:implements>MyInterface</inheritance:implements>
    </jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)