Java JAXB解组错误:预期元素为<;{}根>;
我正在重用在别处生成的现有对象,以解组作为字符串类型传入的XML数据 对象:Java JAXB解组错误:预期元素为<;{}根>;,java,xml,namespaces,jaxb,unmarshalling,Java,Xml,Namespaces,Jaxb,Unmarshalling,我正在重用在别处生成的现有对象,以解组作为字符串类型传入的XML数据 对象: /* 3: */ import java.util.ArrayList; /* 4: */ import java.util.List; /* 5: */ import javax.xml.bind.annotation.XmlAccessType; /* 6: */ import javax.xml.bind.annotation.XmlAccessorType; /* 7: */ im
/* 3: */ import java.util.ArrayList;
/* 4: */ import java.util.List;
/* 5: */ import javax.xml.bind.annotation.XmlAccessType;
/* 6: */ import javax.xml.bind.annotation.XmlAccessorType;
/* 7: */ import javax.xml.bind.annotation.XmlElement;
/* 8: */ import javax.xml.bind.annotation.XmlRootElement;
/* 9: */ import javax.xml.bind.annotation.XmlType;
/* 10: */
/* 11: */ @XmlAccessorType(XmlAccessType.FIELD)
/* 12: */ @XmlType(name="", propOrder={"policy"})
/* 13: */ @XmlRootElement(name="MyNodeResponse")
/* 14: */ public class MyNodeResponse
/* 15: */ {
/* 16: */ @XmlElement(name="Policy")
/* 17: */ protected List<Policy> policy;
/* 18: */
/* 19: */ public List<Policy> getPolicy()
/* 20: */ {
/* 21:65 */ if (this.policy == null) {
/* 22:66 */ this.policy = new ArrayList();
/* 23: */ }
/* 24:68 */ return this.policy;
/* 25: */ }
/* 26: */ }
我的输入XML:
<ns2:MyNodeResponse
xmlns:ns2="mynamespace/2010/10">
<ns2:Policy>
....more data....
<ns2:Policy/>
<ns2:MyNodeResponse />
……更多数据。。。。
解组时出现以下错误:
unexpected element (uri:"mynamespace/2010/10", local:"MyNodeResponse"). Expected elements are <{}MyNodeResponse>
意外元素(uri:“mynamespace/2010/10”,local:“MyNodeResponse”)。预期的要素是
“{}”在错误中具体指的是什么,如何解组以匹配输入XML中存在的内容和对象的预期方式?错误消息是什么意思
“{}”在错误中具体指的是什么
在{}MyNodeRespons
中,{}
部分引用未设置名称空间URI部分的限定名称
如何修复它
您需要使用包级别的@XmlSchema
注释映射名称空间限定:
package info.java
@XmlSchema(
namespace = "mynamespace/2010/10",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
了解更多信息
@XmlSchema
注释,它定义了一个名为elementFormDefault
的属性。为了将元素与其名称空间放在一起,必须将该属性设置为javax.xml.bind.annotation.XmlNsForm.QUALIFIED
。此注释应在package info.java
中定义,谢谢Blaise。在我的例子中,包级别的注释是映射名称空间限定的唯一方法吗?尽管包级别看起来肯定更好,但我也看到了字段/属性级别。
@XmlSchema(
namespace = "mynamespace/2010/10",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;