使用 jaxb 将 xsd 转换为 java 时删除 xsd 元素
Remove xsd element when converting xsd to java using jaxb
我要从 xsd 生成 java 代码。我想知道如何在使用 jaxb 将 xsd 转换为 java 时删除 xsd 元素。我的目标是忽略消息
例如:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="message"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Java 变量
@XmlElement
protected String name;
在这里您可以看到消息元素已被删除。我想知道怎么做?
你能改变 .xsd 吗?
当前元素 "note" 表明 "name" 和 "message" 都是强制性的。如果您希望 "message" 是有条件的,您可能需要添加 minOccurs="0" 属性:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="message" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果我没理解错的话,总而言之,您想忽略一个强制性元素,但仍希望结果能够正确验证。我的简短回答是,这是矛盾的,没有意义。 JAXB 的构建是为了正确地执行它,而您想错误地执行它(?)。
您有多种选择,例如。
- 接受额外的构造函数参数。
- 改为生成无参数构造函数。
- 不生成,但手动代码 JAXB 注释 类。也许关闭一些验证。
- 不要使用 JAXB,使用其他东西(dom4j 等)或手工制作 xml
- 也许您可以在绑定文件甚至插件中添加一些覆盖,但我认为这不值得。
我要从 xsd 生成 java 代码。我想知道如何在使用 jaxb 将 xsd 转换为 java 时删除 xsd 元素。我的目标是忽略消息
例如:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="message"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Java 变量
@XmlElement
protected String name;
在这里您可以看到消息元素已被删除。我想知道怎么做?
你能改变 .xsd 吗? 当前元素 "note" 表明 "name" 和 "message" 都是强制性的。如果您希望 "message" 是有条件的,您可能需要添加 minOccurs="0" 属性:
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="message" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果我没理解错的话,总而言之,您想忽略一个强制性元素,但仍希望结果能够正确验证。我的简短回答是,这是矛盾的,没有意义。 JAXB 的构建是为了正确地执行它,而您想错误地执行它(?)。
您有多种选择,例如。
- 接受额外的构造函数参数。
- 改为生成无参数构造函数。
- 不生成,但手动代码 JAXB 注释 类。也许关闭一些验证。
- 不要使用 JAXB,使用其他东西(dom4j 等)或手工制作 xml
- 也许您可以在绑定文件甚至插件中添加一些覆盖,但我认为这不值得。