0

我在这里遇到了一个棘手的情况。一方面,我需要与这个 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 是有意义的。

问题:我怎样才能跳过文本类并使用字符串,但保留现有的 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 有效?

4

1 回答 1

0

通常,如果您想在对象(反)序列化中将一个类映射到不同的类,则 XmlAdapter 实现是最佳选择。

In your case an TextAdapter extends XmlAdapter<Text, String> {..} should do the trick. You can explicitly assign the adapter to one field using the @XmlJavaTypeAdapter(TextAdapter.class) annotation.

于 2013-07-24T13:10:01.320 回答