JAXB:xjc和派生类型属性的固定值

时间:2016-09-08 13:57:00

标签: xsd jaxb xjc

我正在尝试创建一个带有类型层次结构的xsd。 我希望得到的是子类型用一定的值填充基类型的属性。 这是我最好的结果:

<xs:complexType name="base_type">
    <xs:attribute name="att" use="required" type="xs:string" />
</xs:complexType>
<xs:complexType name="type1_t">
    <xs:complexContent>
        <xs:restriction base="base_type">
            <xs:attribute name="att" fixed="value1" use="required" type="xs:string" />
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>
<xs:complexType name="type2_t">
    <xs:complexContent>
        <xs:restriction base="base_type">
            <xs:attribute name="att" fixed="value2" use="required" type="xs:string" />
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

“att”属性由base_type提供,在type1_t和type2_t的元素中,我希望它们分别设置为“value1”和“value2”。

容器元素如下所示:

<xs:element name="root">
    <xs:complexType>
        <xs:choice maxOccurs="unbounded">
            <xs:element name="type1" type="type1_t" />
            <xs:element name="type2" type="type2_t" />
        </xs:choice>
    </xs:complexType>
</xs:element>

现在我正在运行xjc为这段代码生成Java类,但是我在Type1T.java中得到的“fixed”属性没有表示,它只包含

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "type1_t")
public class Type1T extends BaseType { }

我原本预计

{
  @Override public String getAtt() { return "value1"; }
}

? 这是(几乎)当类型由其自身生成时生成的内容(即不作为基类型的扩展)。

我做错了什么?我想做的就是不可能吗?

我的目标是从xsd自动生成所有java代码;否则我想一种实现这个的方法是手动为每个类编译创建的ObjectFactory方法中的固定值。但是,我需要阻止每次生成ObjectFactory ...

任何提示?提示?想法?

0 个答案:

没有答案