1
我遇到問題。JAXB從未映射到對象根元素的XML標籤創建對象@XmlRootElement
我有下面的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; }
}
現在我想以生成從XML調用以下方法車對象使用JAXB:
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;
}
問題是我從Train中獲得Car對象。
我不明白爲什麼unmarshaller忽略@XmlRootElement(name =「Car」)?
你能幫我解決嗎?
非常感謝您提前。
「bindObjectsFromXml」的參數不匹配。你用2個參數調用它,並聲明3個參數。 – skaffman 2012-02-01 16:27:20
此外,「我也從列車中獲得Car對象」沒有任何意義。請更清楚解釋。 – skaffman 2012-02-01 16:28:06