加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JAXB unmarshalling错误:预期的元素是<{} Root>

发布时间:2020-12-15 05:03:02 所属栏目:Java 来源:网络整理
导读:我正在重用其他地方生成的现有对象来解组以String类型形式出现的 XML数据. 物体: /* 3: */ import java.util.ArrayList;/* 4: */ import java.util.List;/* 5: */ import javax.xml.bind.annotation.XmlAccessType;/* 6: */ import javax.xml.bind.annotati
我正在重用其他地方生成的现有对象来解组以String类型形式出现的 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中存在的内容以及对象期望的方式进行解组?

解决方法

错误消息说的是什么

What exactly does the “{ }” refer to in the error

在{} 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;

欲获得更多信息

> http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读