如何通过 xsdtojava 在自动生成的 jaxb 元素上添加接口?
How to add interface on autogenerated jaxb elements by xsdtojava?
我想为 jaxb
和 xsdtojava
自动生成的 class 添加一个超级 interface
。
问题:我只能在根元素上添加接口(我不想要,但只是为了测试目的)。
我要应用继承的元素是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">
...
绑定文件:
<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>
运行 <extensionArg>-Xinheritance</extensionArg>
.
输出应该是:
...
List<Thelistelement> thelist;
class Thelistelement implements MyInterface {
}
但是列表元素上缺少接口 class。为什么它在根元素 myRequest
上起作用?
我必须向节点添加一个 /xs:complexType
。不知道为什么会这样。
重要的是要注意 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>
我想为 jaxb
和 xsdtojava
自动生成的 class 添加一个超级 interface
。
问题:我只能在根元素上添加接口(我不想要,但只是为了测试目的)。
我要应用继承的元素是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">
...
绑定文件:
<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>
运行 <extensionArg>-Xinheritance</extensionArg>
.
输出应该是:
...
List<Thelistelement> thelist;
class Thelistelement implements MyInterface {
}
但是列表元素上缺少接口 class。为什么它在根元素 myRequest
上起作用?
我必须向节点添加一个 /xs:complexType
。不知道为什么会这样。
重要的是要注意 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>