使用JAXB marshal向XML文件添加/修改元素

时间:2019-06-04 22:21:18

标签: java xml xsd jaxb xml-binding

我正在使用JAXB从具有枚举的XML生成Java代码

    <xs:simpleType name="color">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Blue"/>
        <xs:enumeration value="Green"/>
        <xs:enumeration value="Yellow"/>
    </xs:restriction>
</xs:simpleType>

我想为该枚举添加更多颜色,例如红色和白色。我们不想更新xsd或生成的XML / Java代码,因为这些不属于我们,我们希望保持现状。

选项1.如果有一种读取XSD的方式,当它读取xs:simpleType name =“ color”时,我可以向枚举添加颜色,因此生成的java枚举具有所有需要的值

选项2。如果我可以编写一个适配器来帮助我在生成的Enum中添加值

我已经检查了XMLAdapter,但是重写对我的情况没有帮助。由于它是一个枚举,因此我很难修改它,因为Enums在Java中是恒定的

1 个答案:

答案 0 :(得分:0)

由于很难在枚举中插入值,因此我们使用自定义的JAXB绑定将“ color”元素从Enum转换为String类型。

<jaxb:bindings node="//xs:simpleType[@name='color']">
  <jaxb:typesafeEnumClass map="false" />
</jaxb:bindings>

现在可以插入新值。我们知道这样做是有风险的,因为“颜色”元素现在可以接受任何字符串,但是从我们的项目角度来看,它对我们有用。