java 关于 javax.xml.bind.Unmarshaller 根据xml反射对象的的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 关于 javax.xml.bind.Unmarshaller 根据xml反射对象的的问题相关的知识,希望对你有一定的参考价值。

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"BaseResidentsInfo"). Expected elements are <baseResidentsInfo>
以上是异常
我定义一个类为BaseResidentsInfo,里面有一些属性,当我用unmarshal方法根据xml生成对象时候报错,
String xmlContext = “
<BaseResidentsInfo >"
+ "<ddf1df01ef06_0001>cxx</ddf1df01ef06_0001>"
+ "<ddf1df01ef06_0002>1</ddf1df01ef06_0002>"
+ "</BaseResidentsInfo>";

JAXBContext context = JAXBContext.newInstance(BaseResidentsInfo.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshal(new StringReader(xmlContext));
但我把 <BaseResidentsInfo > 改成 <baseResidentsInfo > 这样就可以运行不报错,怎么回事

参考技术A 你的Bean加上注解,@XmlRootElement,这就不会报错了。
这个注解加在public class 上面。
参考技术B 你的代码主是这样没有 XML 文件和 XSD 直接用字符串的么?

XML 验证过没有?先在 Eclipse 这些工具中右击 Validate 验证一下,先确保这个 XML 与它所使用的 XSD 文件格式是匹配的,比如 XSD 里面说是 baseResidentsInfo 你就不能写成 BaseResidentsInfo,XML 是严格区分大小写的。而这些会被 JAXB 编译器写入代码中,未知的标签就会报告错误停止工作。

另外名字空间也必须匹配。追问

我不是用的StringReader(xmlContext)读取的吗,xml是我自定义的格式肯定是正确的,与类是匹配的,类名是BaseResidentsInfo大写的,但是为什么xml标签要写成小写才行

以上是关于java 关于 javax.xml.bind.Unmarshaller 根据xml反射对象的的问题的主要内容,如果未能解决你的问题,请参考以下文章

转关于Java的Daemon线程的理解

关于java中异常机制

java关于Socket连接错误问题

java 关于ARGB.java

关于Java爬虫的研究

关于 Java 接口和多态性