我封送和拆封邮件。
我有这样的XML类型:
@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;
最佳答案
你可以做:
@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
对象。