2013-05-23 2 views
1

У меня абстрактный класс выглядит так.JAXB с Generified @XmlElement

@XmlTrasient 
public abstract class SimpleValue<R> { 

    public R getRawValue() { 
     return rawValue; 
    } 

    public void setRawValue(final R rawValue) { 
     this.rawValue = rawValue; 
    } 

    @XmlElement(nillable = true, required = true) 
    private R rawValue; 
} 

И я продлил с этим.

public class BooleanValue extends SimpleValue<Boolean> { 
} 

Когда я распечатал схему, я получил это.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" version="1.0" 
      targetNamespace="http://jinahya.googlecode.com/xml/bind" 
      xmlns:tns="http://jinahya.googlecode.com/xml/bind" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="booleanValue" type="tns:booleanValue"/> 

    <xs:complexType name="booleanValue"> 
    <xs:sequence> 
     <xs:element name="rawValue" type="xs:anyType" nillable="true"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Есть ли способ выразить type="xs:anyType" более красиво?

Когда я избыточно переопределить следующие два метода с BooleanValue

@XmlElement(nillable = true, required = true) 
@Override 
public Boolean getRawValue() { 
    return super.getRawValue(); 
} 

@Override 
public void setRawValue(final Boolean rawValue) { 
    super.setRawValue(rawValue); 
} 

я получил.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" version="1.0" 
      targetNamespace="http://jinahya.googlecode.com/xml/bind" 
      xmlns:tns="http://jinahya.googlecode.com/xml/bind" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="booleanValue" type="tns:booleanValue"/> 

    <xs:complexType name="booleanValue"> 
    <xs:sequence> 
     <xs:element name="rawValue" type="xs:boolean" nillable="true"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

ответ

1

Решение - это то, что вы опубликовали в своем вопросе.

@XmlElement(nillable = true, required = true) 
@Override 
public Boolean getRawValue() { 
    return super.getRawValue(); 
} 

@Override 
public void setRawValue(final Boolean rawValue) { 
    super.setRawValue(rawValue); 
} 
+0

透彻 [tòuchè]. Думаю, может быть какое-то «lax = true» или что-то в этом роде. Благодарю. –

Смежные вопросы