2011-09-16 63 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注释。