【发布时间】:2014-02-25 13:23:34
【问题描述】:
我有以下要解组的 XML:
<ListOfYear>
<Requests/>
<Payload>
<Year>
<Value>2013</Value>
</Year>
<Year>
<Value>2012</Value>
</Year>
<Year>
<Value>2011</Value>
</Year>
<Year>
<Value>2010</Value>
</Year>
<Year>
<Value>2009</Value>
</Year>
<Year>
<Value>2008</Value>
</Year>
</Payload>
</ListOfYear>
我的 java 类如下所示:
@XmlRootElement(name = "ListOfYear")
public class YearOutput {
@XmlElementWrapper(name = "Payload")
@XmlElement(name = "Year")
private ArrayList<Year> Payload;
public ArrayList<Year> getPayload() {
return Payload;
}
public void setPayload(ArrayList<Year> payload) {
Payload = payload;
}
}
有效载荷应包含年份对象列表:
@XmlRootElement(name = "Year")
@XmlAccessorType(XmlAccessType.FIELD).
public class Year {
@XmlElement(name = "Value")
int Value;
public int getValue() {
return Value;
}
public void setValue(int value) {
Value = value;
}
}
我正在使用以下代码解组 XML:
String r = response.getEntity(String.class);
JAXBContext jaxbContext = JAXBContext.newInstance(YearOutput.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
YearOutput output = (YearOutput) unmarshaller.unmarshal(new StringReader(r));
我得到一个输出对象就好了,有效负载对象总是空的。我用我的 XML 注释尝试了几种不同的方法,但都无法正常工作。任何帮助将不胜感激。
编辑 我认为名称空间无关紧要,所以我没有发布那部分代码。但是@Blaise Doughan 建议我编组我的模型,看来我的命名空间可能会导致问题......
这是我需要的完整 XML:
<ListOfYear xmlns="http://something.com/">
<Requests/>
<Payload>
<Year>
<Value>2013</Value>
</Year>
<Year>
<Value>2012</Value>
</Year>
<Year>
<Value>2011</Value>
</Year>
<Year>
<Value>2010</Value>
</Year>
<Year>
<Value>2009</Value>
</Year>
<Year>
<Value>2008</Value>
</Year>
</Payload>
</ListOfYear>
这是我的完整模型:
@XmlRootElement(name = "ListOfYear", namespace = "http://something.com/")
public class YearOutput {
@XmlElementWrapper(name = "Payload")
@XmlElement(name = "Year")
private ArrayList<Year> Payload;
public ArrayList<Year> getPayload() {
return Payload;
}
public void setPayload(ArrayList<Year> payload) {
Payload = payload;
}
}
现在当我编组我的模型时,我得到:
<?xml version="1.0" encoding="UTF-8"?>
<ns2:ListOfYear xmlns:ns2="https://something.com/">
<Payload>
<Year>
<Value>2008</Value>
</Year>
</Payload>
</ns2:ListOfYear>
那么我的命名空间做错了什么?
编辑 添加 package-info.java 后一切正常!
@XmlSchema(
namespace = "https://something.com/",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
【问题讨论】:
-
您能否发布更多代码,从您如何创建(或获取)“响应”参考开始?我怀疑 String (r) 实际上并不包含您认为它包含的内容(您是否尝试将其打印出来以查看它是否包含您的 XML?)。
-
@JStevenPerry 这篇文章中的 XML 几乎是我代码输出的副本。不过还是谢谢。