获取没有XML根JAXB的多个元素

时间:2015-09-18 22:55:28

标签: java xml jaxb

考虑下面的测试方法和测试类,编译并运行正常。如果我添加另一个<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 +
                    '}';
        }
    }

1 个答案:

答案 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元素列表。