У меня проблема.
У меня есть следующий XML:
<vehicles>
<Train name="train1" />
<Train name="train2" />
<Train name="train3" />
<Car name="car1" />
<Car name="car2" />
<Car name="car3" />
</vehicles>
Я создал объект:
@XmlRootElement(name="Car")
public class Car
{
private String name;
public Car() { super(); }
@XmlAttribute(name="name")
public String getName() { return name; }
public String setName(String name) { this.name = name; }
}
Теперь я пытаюсь использовать JAXB для генерации объектов Car из XML, вызывая следующий метод:
bindObjectsFromXml(file, Car.class);
public static <T> List<T> bindObjectsFromXml(File file, Class<T> klazz, String[] rootElementsNames) throws Exception
{
List<T> objects = new LinkedList<T>();
XMLStreamReader xmlStreamReader = getXMLStreamReader(file);
JAXBContext context = JAXBContext.newInstance(klazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
xmlStreamReader.nextTag();
for ( String rootElement : rootElementsNames ) // there might be more than one root that we want to skip
{
xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, rootElement );
xmlStreamReader.nextTag();
}
while ( xmlStreamReader.getEventType() == XMLStreamConstants.START_ELEMENT )
{
JAXBElement<T> jaxbElement = unmarshaller.unmarshal(xmlStreamReader, klazz);
T klazzInstance = jaxbElement.getValue();
objects.add( klazzInstance );
if (xmlStreamReader.getEventType() == XMLStreamConstants.CHARACTERS)
{
xmlStreamReader.next();
}
}
return objects;
}
Проблема в том, что я получаю объект "Автомобиль" также с поезда.
Я не понимаю, почему демаршаллер игнорирует @XmlRootElement (name = "Car")?
Не могли бы вы помочь мне с этим?
Заранее большое спасибо.