【发布时间】:2014-08-22 20:55:50
【问题描述】:
我在使用 JAXB 和解组以下 XML 时遇到问题
<ns2:ID entry-method="manual"> 123456789012345678
<ns2:ID2>123456789012345678</ns2:ID2>
</ns2:ID>
我获得了架构并使用 JAXB xjc 工具生成了以下属性定义:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"ID1",
"ID2",
"ID3"
})
@XmlRootElement(name = "ID")
public class ID {
@XmlElement(name = "ID1")
protected String id1;
@XmlElement(name = "ID2")
protected String id2;
@XmlElement(name = "ID3")
protected String id3;
@XmlAttribute(name = "entryMethod")
protected String entryMethod;
public String getId1() {
return id1
}
public void setId1(String value) {
this.id1 = value;
}
public String getId2() {
return id2
}
public void setId2(String value) {
this.id2 = value;
}
public String getId3() {
return id3;
}
public void setId3(String value) {
this.id3 = value;
}
public String getEntryMethod() {
if (entryMethod == null) {
return "swipe";
} else {
return entryMethod;
}
}
public void setEntryMethod(String value) {
this.entryMethod = value;
}
}
正如您所见,发送 XML 的设备不包含 ID1 标签,它只是将 ID1 数据添加为根标签的值。解组此 Xml 时,对 getID1 的任何调用都返回 null。我对使用哪些注释来更改类以支持将根标记中的数据分配给 id1 字段感到困惑。
关于哪些注释更改会使这项工作发挥作用的任何想法?
- 蒂姆
【问题讨论】:
-
如果XML标签是
<ns:ID1>,它将被存储在ID.id1,如果它是<ns:ID2>,它将被存储在ID.id2——这就是使用不同标签的全部意义所在。 - 如果您不关心标签并希望收到 ID1、ID2、ID99、FOO、BAR、...中的任何一个:它可以完成,但为什么您对它的(精确)工作方式不满意?字段为 null 表示根据设计缺少元素或属性。 -
@laune 我理解,但是规范说明如果 entry-method 属性设置为 swipe,则不需要存在
标签,可以将值分配给 标签。我不能改变它,也不能改变生成我收到的 xml 的系统,因此我必须在这些限制内工作。当我说如果我能改变它我会相信我。 :)