我收到的xml看起来像是:
<result xmlns="firstUri">
<blackList xmlns:ns1="secondUri">
<ns2:BlackList xmlns:ns2="thirdUri">
<name xmlns="thirdUri">some value</name>
<nameFlag xmlns="thirdUri">some value</nameFlag>
</ns2:BlackList>
<ns2:BlackList xmlns:ns2="thirdUri">
<name xmlns="thirdUri">some value</name>
<nameFlag xmlns="thirdUri">some value</nameFlag>
</ns2:BlackList>
..........................................................
</blackList>
<retCode xmlns:ns1="secondUri">0</retCode>
<retDesc xmlns:ns1="secondUri">Succeeded</retDesc>
</result>
我想把它解构为对象。
我创建了以下bean:
@XmlRootElement(name = "result", namespace ="firstUri")
public class GetBlackListResp {
protected String retCode;
protected String retDesc;
protected List<BlackListItem> blackListArray;
@XmlRootElement(name = "BlackList", namespace = "thirdUri")
public static class BlackListItem{
protected String name;
protected String nameFlag;
@XmlElement(name = "name", namespace = "thirdUri")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "nameFlag", namespace = "thirdUri")
public String getNameFlag() {
return nameFlag;
}
public void setNameFlag(String nameFlag) {
this.nameFlag = nameFlag;
}
}
@XmlElement(name = "retCode", namespace = "firstUri")
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
@XmlElement(name = "retDesc", namespace = "firstUri")
public String getRetDesc() {
return retDesc;
}
public void setRetDesc(String retDesc) {
this.retDesc = retDesc;
}
@XmlElement(name = "blackList", namespace = "firstUri")
public List<BlackListItem> getBlackList() {
return blackListArray;
}
public void setBlackList(List<BlackListItem> blackListArray) {
this.blackListArray = blackListArray;
}
}
解组后,我得到了一个成功填充的对象,除了blackListArray字段。该字段包含列表,该列表只有一个项目。该项目中的所有字段均为空。
似乎JAXB可以找到元素,但是会遗漏其中的所有内部元素。
我使用MOXy作为JAXB实现。
P.S。
我尝试将package-info.java放在我的bean的文件夹中,如that question
中所述@XmlSchema(
elementFormDefault=XmlNsForm.QUALIFIED,
namespace="thirdUri",
xmlns={@XmlNs(prefix="ns2",
namespaceURI="thirdUri")}
)
package package.with.my.bean;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
但它对我没有帮助。
答案 0 :(得分:3)
你快到了。删除内部@XmlRootElement
类上的BlackListItem
注释,并将getBlackList
方法上的注释更改为:
@XmlElementWrapper(name = "blackList", namespace = "firstUri")
@XmlElement(name = "BlackList", namespace = "thirdUri")
public List<BlackListItem> getBlackList() {
return blackListArray;
}