我正在编组和解组消息。 我有这样的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>
此外,Messages不能使用messageId字段继承某些基类。 我能写这样的东西吗?:
//inside Message
@SomeAnnotation(useOnlyChildFields=true)
MessageIdClass msgId;
答案 0 :(得分: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
进行注释。
答案 1 :(得分:1)
我相信@XmlValue
正是您所寻找的,这将消除messageId
元素:
@XmlAccesorType(XmlAccesorType.FIELD)
@XmlType(name="MessageIdType")
public class MessageIdClass{
@XmlValue
private String messageId;
//getters and setters
}
了解更多信息