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类。
任何人都可以帮我解决这个问题
答案 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