unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Run Code Online (Sandbox Code Playgroud)
从xml解组时遇到异常
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
Run Code Online (Sandbox Code Playgroud)
组类没有任何注释,group.xml只包含数据.
什么都可能是原因?
bdo*_*han 108
看起来您的XML文档的根元素是"Group"而不是"group".您可以:
小智 33
您需要将package-info.java放入生成的jaxb包中.它的内容应该是这样的
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.org/StudentOperations/")
package generated.marsh;
Run Code Online (Sandbox Code Playgroud)
小智 29
幸运的是,package-info类不是必需的.我能用iowatiger08解决方案修复我的问题.
这是我的修复显示错误消息,以帮助加入点的一些.
错误信息
javax.xml.bind.UnmarshalException:意外元素(uri:" http://global.aon.bz/schema/cbs/archive/errorresource/0 ",local:"errorresource").预期的元素是<{} errorresource>
修复前的代码
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="", propOrder={"error"})
@XmlRootElement(name="errorresource")
public class Errorresource
Run Code Online (Sandbox Code Playgroud)
修复后的代码
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="", propOrder={"error"})
@XmlRootElement(name="errorresource", namespace="http://global.aon.bz/schema/cbs/archive/errorresource/0")
public class Errorresource
Run Code Online (Sandbox Code Playgroud)
您可以看到添加到@XmlRootElement的命名空间,如错误消息中所示.
在查看更多内容之后,根元素必须与Blaise注意到的模式命名空间相关联.然而,我没有一个package-info java.因此,在不使用@XMLSchema注释的情况下,我能够通过使用来纠正此问题
@XmlRootElement (name="RetrieveMultipleSetsResponse", namespace = XMLCodeTable.NS1)
@XmlType(name = "ns0", namespace = XMLCodeTable.NS1)
@XmlAccessorType(XmlAccessType.NONE)
public class RetrieveMultipleSetsResponse {//...}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
这是一个相当不错的小众用例的解决方案,但每次都会让我受益。如果使用的是Eclipse Jaxb生成器,它将创建一个名为package-info的文件。
@javax.xml.bind.annotation.XmlSchema(namespace = "blah.xxx.com/em/feed/v2/CommonFeed")
package xxx.blah.mh.domain.pl3xx.startstop;
Run Code Online (Sandbox Code Playgroud)
如果删除此文件,它将允许解析更通用的xml。试试看!