JAXB序列化:从类名

时间:2015-10-02 11:18:36

标签: java xml generics jaxb

这是一笔交易: 我们假设我有一个带有泛型的 类,如下所示:

public class Item<K,V>{

private K key;
private V value;
// some constructors/getters/setters here:
{...}

具体来说,让我们考虑一下这个对象:

Item<String, SomeEnum> someItem = new Item<>("LolString", SomeEnum.SomeEnumValue).

这是默认序列化:

<item>
    <key xsi:type="xs:string">LolString</key>
    <value xsi:type="someEnum">SomeEnumValue</value>
</item>

我怎样才能代替xsi:type属性创建一个带有节点的树,这些节点具有传递给泛型的类的名称,如下所示:

<item>
    <key>
        <String>LolString</string>
    </key>
    <value>
        <someEnum>SomeEnumValue</someEnum>
    </value>
</item>

2 个答案:

答案 0 :(得分:0)

在您的XSD中,通过选择各种元素,使密钥和值成为复杂类型:http://www.w3schools.com/schema/el_choice.asp

答案 1 :(得分:0)

如果您有一组有限的类,则可以使用@XmlElements注释来指定每个类所需的元素名称。

类似的东西:

@XmlElements(
    @XmlElement(name="String", type=String.class),
    @XmlElement(name="someEnum", type=SomeEnum.class)
}

但是很难说这对你的Item课程是否有用。我认为@XmlElements由于某种原因要求该属性是一个集合,所以你会有类似的东西:

@XmlElements(
    @XmlElement(name="String", type=String.class),
    @XmlElement(name="someEnum", type=SomeEnum.class)
}
private List<Serializable> key;

这可能不是你真正想要的。

但这是一个纯粹的注释解决方案。