2011-09-16 107 views
4

我會進行封送和解組消息。 我有XML類型是這樣的:JAXB使用子元素的註釋

@XMLAccesorType(AccesorType.FIELD) 
@XMLType(name="Header") 
public class Header{ 

@XMLElement(name="messageId") 
private String messageId; 
//getters and setters 
} 

,我有消息鍵入:

<Message> 
<messageId>1111</messageId> 
</Message> 

我想的MessageId類型分配給獨立的類,因爲我用了很多的不同的消息時間:

@XMLAccesorType(AccesorType.FIELD) 
@XMLType(name="MessageIdType") 
public class MessageIdClass{ 

@XMLElement(name="messageId") 
private String messageId; 
//getters and setters 
} 

但後來我有不必要的標記包裝MessageId。 我想:

<Message> 
    <MessageId>1111</MessageId> 
</Message> 

不過的了:

<Message> 
    <MessageIdType> 
     <MessageId>1111</MessageId> 
    </MessageIdType> 
</Message> 

消息也不能繼承與MESSAGEID領域的一些基礎類。 我可以寫這樣的事情?:

//inside Message 
@SomeAnnotation(useOnlyChildFields=true) 
MessageIdClass msgId; 
+1

你能解釋一下嗎?但是我有不需要的標籤,它包裹着MessageId.'? – Thor

回答

3

你可以這樣做:

@XmlType(name="MessageIdType") 
public class MessageIdClass{ 
    @XmlValue 
    private String messageId; 
} 

這將創建一個簡單的類型。

如果你需要一個以上的財產,或者如果你需要的屬性不能映射到一個簡單的類型,你仍然可以創建多個屬性類型,然後使用:

new JAXBElement<MessageIdClass>(
    new QName("http://foo/bar", "ElementOfThisType"), 
    MessageIdClass.class, 
    null, 
    object_of_type_MessageIdClass); 

創建這種類型的元素。這通常在ObjectFactory中完成,方法是接收MessageIdClass對象,並用@XmlElementDecl註釋。