Я пытаюсь развернуть вложенный XML-файл с помощью XMLStreamReader. Мой XML-файл выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<tns:Envelope
xmlns:tns="http://www.w3.org/2003/05/soap-envelope-dial"
xmlns:lmic="http://www.example.com"
xmlns:producer="http://example1.com/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:ns5="http://www.example.com/dial/3/0">
<tns:header>
...
...
</tns:header>
<tns:body>
<producer:Producer id="1234">
<producer:GenParty>
<producer:NameInfo>
<producer:Comm>
<producer:SuppName>DATA</producer:SuppName>
<producer:ContractNumber>123456</producer:ContractNumber>
</producer:Comm>
</producer:NameInfo>
<producer:Address>
<Street>ABC</Street>
<Country>DEF</Country>
...
...
</prodcer:Address>
<producer:Address>
<Street>ABC</Street>
<Country>DEF</Country>
...
...
</prodcer:Address>
</producer:GenParty>
</producer:Producer>
</tns:body>
</tns:emvelope>
Я создал следующие классы:
@XmlRootElement(name="Producer",namespace="http://example.com/")
@XmlAccessorType(XmlAccessType.FIELD)
Class Producer {
private GenParty;
// getter method of class GenParty
// setter method of class GenParty
}
@XmlRootElement(name="GenParty")
@XmlAccessorType(XmlAccessType.FIELD)
class GenParty {
private NameInfo;
private List<Address> address;
//getter of both fields
// setter of both fields
}
и определены последующие классы.
Я использую XMLStreamReader для перехода к тегу, а затем пишу свой код демаршалера как:
JAXBContext jc = JAXBContext.newInstance(Producer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Producer producer = unmarshaller.unmarshal(xsr,Producer.class).getValue();
Однако я получаю нулевое значение, установленное для объекта Producer. Есть ли что-то, что я делаю неправильно? Я мог бы разархивировать простые XML-файлы, но этот уровень вложенности создает для меня проблемы. Может ли кто-нибудь предложить легко это сделать или какие-либо изменения, которые я должен внести в свой скелет кода?
Заранее большое спасибо!
xmlns:producer="http://example1.com/"
, но класс Producer указываетnamespace="http://example.com/"
- person Luciano van der Veekens   schedule 14.12.2017