JAXB Аннотация для использования дочерних элементов - PullRequest
4 голосов
/ 16 сентября 2011

Я делаю маршалинг и демаршалинг сообщений.У меня есть тип 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;

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

Вы можете сделать:

@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 голос
/ 16 сентября 2011

Я считаю, что @XmlValue - это то, что вы ищете, это исключит элемент messageId:

@XmlAccesorType(XmlAccesorType.FIELD)
@XmlType(name="MessageIdType")
public class MessageIdClass{

    @XmlValue
    private String messageId;
    //getters and setters
}

Для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...