Ошибка создания экземпляра вложенного сложного элемента XMLBeans

Я использую XMLBeans для создания объектов Java из схемы XSD. Схема имеет следующую структуру:

<schema targetNamespace="" xmlns="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">
    <element name="Father">
        <complexType>
            <all>
                <element name="Son">
                    <complexType>
                        <all>
                            <element name="Target" type="string" />
                        </all>
                    </complexType>
                </element>
            </all>
        </complexType>
    </element>
</schema>

Схема скомпилирована в порядке, и я могу создать экземпляр Отца:

Father father = Father.Factory.newInstance();

Но когда я пытаюсь выполнить:

father.getSon().setTarget("Some String");

Я получаю исключение нулевого указателя. При отладке я увидел, что Son равен нулю (отсюда и исключение). Все, что мне нужно, это установить значение «Цель», но я не мог найти способ сделать это....

Есть ли способ автоматически построить всю структуру XSD? В качестве альтернативы, могу ли я создать экземпляр «Сына» вручную, а затем получить доступ к его «Цели»?

Большое спасибо!

O.J


person Ohad Dan    schedule 22.03.2011    source источник


Ответы (1)


Метод getSon() позволяет получить существующего дочернего элемента с именем Son. Если вы пытаетесь создать новый xml, вы должны начать с пустого документа. Затем вы должны добавить свои элементы по своему усмотрению, прежде чем обращаться к ним. Попробуйте этот код:

FatherDocument fatherDocument = FatherDocument.Factory.newInstance();
Father father = fatherDocument.addNewFather();
Son son = father.addNewSon();
son.setTarget("Some string");
StringWriter writer = new StringWriter();
fatherDocument.save(writer);
System.out.println(writer.toString());

Я создал этот xml:

<Father><Son><Target>Some string</Target></Son></Father>
person javanna    schedule 22.03.2011
comment
Работает как магия. Это именно то, что я должен был сделать. Спасибо! - person Ohad Dan; 23.03.2011