2

我正在尝试使用命名空间解组 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")改变的东西吗?或者,如果您知道的比我多,任何帮助将不胜感激。谢谢

4

3 回答 3

2

用例 #1 - 所有元素都是命名空间限定的

如果文档中的所有(或大多数)元素都将使用相同的命名空间进行限定,请使用@XmlSchema注释来指定命名空间限定。 @XmlSchema是一个包级别的注释,所以它在一个特殊的类上package-info,看起来像。指定一个namespace和的组合elementFormDefault=XmlNsForm.QUALIFIED意味着这个命名空间将应用于所有没有覆盖命名空间的元素。

包信息.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;

用例 #2 - 只有根元素是命名空间限定的

如果只有根元素是命名空间限定的,则使用@XmlRootElement注释。

@XmlRootElement(name="package", namespace = "http://www.leap.com/rest/package")
@XmlAccessorType(XmlAccessType.NONE)
public class DenPackage { 
.....

}

了解更多信息

于 2013-08-01T19:59:01.320 回答
1

只需添加命名空间属性:

@XmlRootElement(name="package", namespace = "http://www.leap.com/rest/package")
于 2013-08-01T19:56:24.383 回答
1

你需要pkg namespace像这样在你的类上定义:

@XmlRootElement(name="package" namespace = "http://www.leap.com/rest/package")
@XmlAccessorType(XmlAccessType.NONE)
public class DenPackage { 
.....

}

请记住,如果您的 xml 中有子元素(未在示例中显示)并且它们也属于命名空间,则为它们定义命名空间以及 命名空间不会被绑定类上的字段“继承”

于 2013-08-01T19:58:12.320 回答