2013-07-22 91 views
0

我總得有一個棘手的情況在這裏。一方面,我需要與這個xsd方案同步,另一方面,從這個xsd生成的類在某種程度上是無用的。JAXB映射覆雜類型爲String

<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有效嗎?

回答

0

通常,如果你想一個類對象映射到不同的類(DE)-serialization的XmlAdapter實施是最好的選擇。

在你的情況下,TextAdapter extends XmlAdapter<Text, String> {..}應該做的伎倆。 您可以使用@XmlJavaTypeAdapter(TextAdapter.class)批註將適配器明確分配到一個字段。

+0

我不得不承認,我不是很滿意XMLAdapters的解決方案,但多數民衆贊成去與JAXB的方式 – Vadimo