Какова реализация списка по умолчанию в Jaxb2 и как мне ее изменить?

#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)?