我封送和拆封邮件。
我有这样的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对象。

08-26 03:02
查看更多