使用 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
  • 也许您可以在绑定文件甚至插件中添加一些覆盖,但我认为这不值得。