#java #list #jaxb #jaxb2
#java #Список #джаксб #jaxb2
Вопрос:
Кто-нибудь знает, какова реализация по умолчанию для экземпляров списка в JaxB2?
Есть ли способ изменить реализацию, и если да, то что это такое?
Ответ №1:
Реализация списка по умолчанию в JAXB 2 — java.util.ArrayList. При создании вашей модели из схемы XML вы можете установить collectionType
во внешнем файле привязок, чтобы выбрать альтернативную реализацию:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="customer.xsd">
<jxb:bindings node="//xs:element[@name='customer']/xs:complexType/xs:sequence/xs:element[@name='phone-number']">
<jxb:property collectionType="java.util.LinkedList"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Для получения дополнительной информации
Комментарии:
1. Что делать, если вы не создаете свою модель на основе XML-схемы? Похоже, что из той статьи, на которую вы ссылались, единственный способ указать его только с помощью Java-кода (без XJC, что бы это ни было) — это указать тип списка в переменной (т.Е. private LinkedList<XMLType> list ).
2. Если вы инициализируете свое поле списка, то ваш JAXB impl будет использовать его: List foo = new LinkedList(); .
3. У меня был JaxB2, который помещал списки null в поля, если элемента там нет — будет ли он учитывать, что поле не равно нулю, если дочерних элементов там нет (в XML, который я сопоставляю, это отношение 0-N)?