jaxb将具有一个值的复杂类型映射到String

时间:2013-07-22 15:26:07

标签: jaxb jaxb2

我在某种程度上是一个棘手的情况。一方面,我需要与这个xsd方案同步,另一方面,这个xsd生成的类在某种程度上是无用的。

<xs:schema>
    ...
    <xs:complexType name="Text">
        <xs:simpleContent>
            <xs:extension base="xs:string"/>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>

我从上面的xsd生成的类就是这个。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Text", propOrder = { "value" })
public class Text {
    @XmlValue
    protected String value; 
    .. getter .. setter
}

该类只有一个字符串属性,用String类型而不是Class替换它是有意义的。

问题:如何跳过Text Class并改用String,但保留现有的xsd。

所以不要写这个:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Description", propOrder = { "content" })
public class Description{
  @XmlElement(name = "Content") 
  protected Text content;

我想写这样的东西:

@XmlElement(name = "Content")   
@MagicHere_ThisTypeMappToText
protected String content;

jaxb中是否有一个注释允许我包装文本类但保留对xsd有效?

1 个答案:

答案 0 :(得分:0)

通常,如果要将一个类映射到object(de)-serialization中的不同类,则XmlAdapter实现是最佳选择。

在你的情况下,TextAdapter extends XmlAdapter<Text, String> {..}应该可以解决问题。 您可以使用@XmlJavaTypeAdapter(TextAdapter.class)注释将适配器显式分配给一个字段。