jaxb解组错误:预期的元素是< {}root>

7xzttuei  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(287)

我正在重用在别处生成的现有对象,以解组作为字符串类型传入的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:   */ 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:   */ }

我的解组代码:

JAXBContext jc = JAXBContext.newInstance(MyNodeResponse.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller();
MyNodeResponse myNodeResponse = (MyNodeResponse)unmarshaller.unmarshal(new InputSource(new ByteArrayInputStream(xmlStringInput.getBytes("utf-8"))));

我的输入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>

错误中的“{}”到底指的是什么?我如何解组以匹配输入xml中的内容和对象的期望?

eanckbw9

eanckbw91#

@XmlSchema 定义名为 elementFormDefault . 为了将元素与其命名空间放在一起,必须将此atribute设置为 javax.xml.bind.annotation.XmlNsForm.QUALIFIED . 此注解应在中定义 package-info.java

k3fezbri

k3fezbri2#

错误消息的含义

错误中的“{}”到底指的是什么
{}MyNodeRespons 这个 {} 部分是指没有设置命名空间uri部分的限定名。

如何修复

您需要使用包级别Map名称空间限定 @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;

了解更多信息
http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

相关问题