我编写了一个包含以下类型的架构:Person
和Car
。 Car具有ID属性,Person具有引用Car ID的IDREF属性。
我已将绑定指令添加到Person中,因此car属性是Car而不是Object,但它不起作用(看起来<jxb:property>
仅适用于元素,而不适用于属性?):
<xsd:complexType name="Person">
<xsd:annotation>
<xsd:appinfo>
<jxb:property name="car">
<jxb:baseType name="com.example.Car"/>
</jxb:property>
</xsd:appinfo>
</xsd:annotation>
<xsd:attribute name="car" type="xsd:IDREF"/>
</xsd:complexType>
<xsd:complexType name="Car">
<xsd:attribute name="id" type="xsd:ID"/>
</xsd:complexType>
当我使用xjc从这个模式生成Java类时,我得到以下类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Person")
public class Person {
@XmlAttribute(name = "car")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
protected Object car;
public Object getCar() {
return car;
}
public void setCar(Object value) {
this.car = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Car")
public class Car {
@XmlAttribute(name = "id")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
protected String id;
public String getId() {
return id;
}
public void setId(String value) {
this.id = value;
}
}
有没有办法告诉xjc将Person.car的类型缩小到Car而不是Object?
答案 0 :(得分:1)
这似乎对我使用属性有用。需要注意的一点是,我必须在xsd声明中包含jaxb:version。没有这个,这一代就失败了。
Xsd提取物:
<xs:attribute name="idRef" type="xs:IDREF">
<xs:annotation>
<xs:appinfo>
<jaxb:property>
<jaxb:baseType name="PractitionerType"/>
</jaxb:property>
</xs:appinfo>
</xs:annotation>
</xs:attribute>
生成:
@XmlAttribute(name = "idRef")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
protected PractitionerType idRef;