带有Generified @XmlElement的JAXB

时间:2013-05-23 12:03:57

标签: generics jaxb schema jaxb2

我有一个抽象类看起来像这样。

@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 个答案:

答案 0 :(得分:1)

解决方案就是您在问题中发布的内容。

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

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