2014-02-20 1 views
2

Я написал схему, которая содержит следующие типы: Person и Car. Автомобиль имеет атрибут идентификатора, а Person имеет атрибут IDREF, который относится к идентификатору автомобиля.Как заставить тип атрибута IDREF для реального целевого типа с помощью xjc

Я добавил привязки директивы в Person, так что атрибут автомобиля является автомобиль вместо объекта, но он не работает (выглядит как <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> 

Когда я генерировать классы Java из этой схемы с XJC, я получаю следующие классы:

@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 на автомобиль вместо объекта?

+0

возможно дубликат [указать тип для IDREF в схеме XML] (http://stackoverflow.com/questions/16285036/specify-type -для-IDREF-в-XML-схемы) –

ответ

1

Это, похоже, работает для меня с использованием атрибута. Следует отметить, что мне пришлось включить версию jaxb: в объявлении xsd. Без этого поколение потерпело неудачу.

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; 
Смежные вопросы