Я пытаюсь разархивировать XML-данные из файла со следующим файлом схемы, используя NetBeans 8.2, в веб-приложении Java.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.netbeans.org/schema/xSchema"
xmlns:tns="http://xml.netbeans.org/schema/xSchema"
elementFormDefault="qualified">
<xsd::complexType name="xItem">
<xsd:sequence>
<xsd:element name="item1" type="xsd:string"/>
<xsd:element name="item2" type="xsd:string"/>
<xsd:element name="item3" type="xsd:int"/>
<xsd:element name="x-price">
<xsd:complexType>
<xsd:sequence>
<xsd:element name = "item4" type="xsd:string"/>
<xsd:element name = item5" type = "xsd:float"/>
<xsd:element name = "item6" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name = "xList">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x_details" type="tns:xItem" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Я создал XML-документ с использованием NetBeans и заполнил его данными, соответствующими файлу схемы.
Схема XML связана с веб-приложением Java с помощью Jaxb. Я создал код демаршаллинга, используя метод jaxbu, который выглядит следующим образом
xList currentx = new xList();
//UnMarshal data from XML to Object
try {
javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(currentx.getClass().getPackage().getName());
javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
currentx = (xList) unmarshaller.unmarshal(fileHandle); //NOI18N
} catch (javax.xml.bind.JAXBException ex) {
// XXXTODO Handle exception
java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
}
Результирующий ArrayList currentx, содержит все экземпляры item1, item2 и item 3. Однако он, похоже, не содержит элементов 4 и 5. fileHandle является объектом FILE и, очевидно, указывает на правильный файл.
Сгенерированные файлы включают в себя классы для xItem и вложенный статический класс для x-price, но всякий раз, когда я пытаюсь извлечь данные из вложенного класса, я получаю исключение нулевого указателя для items4, 5 и 6, но могу читать элементы 1,2 и 3. Функция демаршаллинга работает без каких-либо исключений.
Использую ли я правильные методы для отмены сортировки всех данных, или я что-то упустил, чтобы справиться с x-ценой (пункты 4, 5 и 6)? Как это сделать?
Первая запись XLM и заголовок:
<ns1:xList
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:ns1='http://xml.netbeans.org/schema/xSchema'
xsi:schemaLocation='http://xml.netbeans.org/schema/xSchema xSchema1.xsd'>
<ns1:x_details>
<ns1:item1>AA</ns1:item1>
<ns1:item2>AA</ns1:item2>
<ns1:aitem3>212</ns1:item4>
<ns1:x-price>
<ns1:item4>GBP</ns1:item4>
<ns1:item5>75.26</ns1:item5>
<ns1:item6>04/12/2018</ns1:item6>
</ns1:x-price>
</ns1:x_details>