我在某种程度上是一个棘手的情况。一方面,我需要与这个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有效?
答案 0 :(得分:0)
通常,如果要将一个类映射到object(de)-serialization中的不同类,则XmlAdapter实现是最佳选择。
在你的情况下,TextAdapter extends XmlAdapter<Text, String> {..}
应该可以解决问题。
您可以使用@XmlJavaTypeAdapter(TextAdapter.class)
注释将适配器显式分配给一个字段。