javax.xml.bind.UnmarshalException:意外元素(uri:“”,local:“systemUnit”)

时间:2016-03-18 04:38:18

标签: java xml jaxb

  

javax.xml.bind.UnmarshalException:意外元素(uri:“”,   本地: “systemUnit”)。预期的要素是   < {http://xyz.abc.com/consumer/systems} systemUnit>

从xml解组时遇到异常

 SystemUnit systemUnit;
 {
     final ByteArrayOutputStream originalStream = new ByteArrayOutputStream();
     try {
         final TeeInputStream tee = new TeeInputStream(new FileInputStream("E:/ws/test.xml"), originalStream);

         try {
             final JAXBContext jc = JAXBContext.newInstance(SystemUnit.class);
             final Unmarshaller unmarshaller = jc.createUnmarshaller();

             systemUnit = (SystemUnit)unmarshaller.unmarshal(tee);

           System.out.println("Success"); // Pending NO exceptions during processing...

         }
         catch (final javax.xml.bind.JAXBException e) {
             System.out.println("Exception came");
             e.printStackTrace();
         }
         finally {
             tee.close();
         }

    //     contactLog.setMessage(originalStream.toByteArray());
     }
     finally {
         originalStream.close();
     }

}

我有一个注释@XmlRootElement(name =“systemUnit”)到systemUnit类。

任何人都可以帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

尝试使用http://xyz.abc.com/consumer/systems作为xml文件中的默认命名空间。

xml应包含以下内容:

<systemUnit xmlns="http://xyz.abc.com/consumer/systems">

答案 1 :(得分:0)

你已经配置jaxb用于等待带有“http://xyz.abc.com/consumer/systems”的xml元素,但我认为在你的E:/ws/text.xml中没有用于元素的uri

因此,请考虑不同的解决方案:

<强> 1。如果您不想在XML中使用URI,请以这种方式重新配置JAXB

1.a - 如果您已从xml架构生成JAXB bean,请查看

elementFormDefault="qualified"

targetNamespace="http://xyz.abc.com/consumer/systems"

在xsd文件中

1.b - 如果您有直接带注释的代码jaxb bean,请考虑删除@XmlType(namespace="http://xyz.abc.com/consumer/systems")注释

1.c - 也许有一个package-info.java文件描述了tour jaxb bean的默认命名空间。删除它

<强> 2。如果要在XML中使用URI:使用正确的命名空间

更正xml test.xml