考虑下面的测试方法和测试类,编译并运行正常。如果我添加另一个<TestClass>
元素,就像这样 - <TestClass><x>1</x><y>2</y></TestClass><TestClass><x>1</x><y>2</y></TestClass>
- 我得到UnmarshallException
。
如何扩展以下代码以处理多个<TestClass>
元素?我不想更改XML ...我只想处理多个没有根XML元素的元素......
@Test
public void testJaxbMultipleElementsWithNoRoot() throws Exception{
String xml = "<TestClass><x>1</x><y>2</y></TestClass>";
Class xmlResponseClass = TestClass.class;
JAXBContext jaxbContext = JAXBContext.newInstance(TestClass.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<TestClass> root = jaxbUnmarshaller.unmarshal(new StreamSource(new StringReader(xml)), TestClass.class);
TestClass testClass = root.getValue();
System.out.println(testClass);
}
@XmlRootElement(name = "TestClass")
public static class TestClass {
private int x;
private int y;
@XmlElement(name = "x")
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
@XmlElement(name = "y")
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "TestClass{" +
"x=" + x +
", y=" + y +
'}';
}
}
答案 0 :(得分:1)
<TestClass><x>1</x><y>2</y></TestClass><TestClass><x>1</x><y>2</y></TestClass>
这不是有效的XML,因为XML文档始终只有一个根元素。
JAXB只能解组有效的XML文档。
确保您只使用有效的XML文档。例如。在这种情况下:将它们分成2个XML文档,然后依次解组。
另一个解决方案是引入一个新的根元素,它可以包含一个TestClass元素列表。