我正在尝试使用命名空间解组xml以从中创建对象。我得到的例外是该元素不是预期的。这就是我所拥有的。
@XmlRootElement(name="package")
@XmlAccessorType(XmlAccessType.NONE)
public class DenPackage {
.....
}
xml:
<?xml version="1.0" encoding="ASCII"?>
<pkg:package xmlns:pkg="http://www.leap.com/rest/package">
</pkg:package>
例外:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.leap.com/rest/package", local:"package"). Expected elements are <{}package>
@XmlRootElement(name="package")
是否应该改变?或者,如果您比我知道的更多,我们非常感谢您的帮助。感谢
答案 0 :(得分:2)
如果文档中的所有(或大多数)元素都要使用相同的命名空间限定,请使用@XmlSchema
注释指定命名空间限定。 @XmlSchema
是一个包级注释,因此它会出现一个名为package-info
的特殊类,看起来像。指定namespace
和elementFormDefault=XmlNsForm.QUALIFIED
的组合意味着此命名空间将应用于尚未覆盖命名空间的所有元素。
<强> package-info.java 强>
@XmlSchema(
namespace = "http://www.leap.com/rest/package",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.leap.rest.pkg;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
如果只是根元素是名称空间限定的,那么使用@XmlRootElement
注释。
@XmlRootElement(name="package", namespace = "http://www.leap.com/rest/package")
@XmlAccessorType(XmlAccessType.NONE)
public class DenPackage {
.....
}
答案 1 :(得分:1)
只需添加命名空间属性:
@XmlRootElement(name="package", namespace = "http://www.leap.com/rest/package")
答案 2 :(得分:1)
您需要在课堂上定义pkg namespace
,如下所示:
@XmlRootElement(name="package" namespace = "http://www.leap.com/rest/package")
@XmlAccessorType(XmlAccessType.NONE)
public class DenPackage {
.....
}
请记住,如果您的xml中有子元素(未在示例中显示)并且它们也属于命名空间,则为它们定义命名空间以及命名空间不会被绑定的字段“继承”类