我的代码工作正常一段时间。我改变了一些东西,现在我有一些整数列表,它们不再正确解组。为了尝试解决这个问题,我将整个问题归结为以下问题,问题仍然存在。
我已将XML文件缩减为测试文件,整个内容为
<polylist>
<p>1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5</p>
</polylist>
我已将Java代码缩减为测试文件,整个内容为
import java.io.File;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "polylist")
public class PolyList
{
public List<Integer> p;
public static void main(String[] args) throws Exception
{
JAXBContext jaxbContext = JAXBContext.newInstance(PolyList.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
PolyList pl = (PolyList)unmarshaller.unmarshal(new File("ptest.xml"));
System.out.println(pl.p);
}
}
打印pl.p会产生[1291596391]
的输出,而不是预期的[1 0 0 0 0 1 2 ...]
。如果我将public List<Integer> p;
更改为public List<String> p;
,则会按预期正确输出[1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5]
。因此,它正确地获取List<String>
但不是List<Integer>
。它工作正常,几天前在完整的制作项目中正确地获得了List<Integer>
,但现在不再了。
(编辑)
实际上,List<String>
版本也不起作用。数字之间没有逗号,这意味着它没有显示多个字符串的列表,每个字符串代表不同的数字。相反,它仍然是1个字符串代表整个事物。
谢谢Blaise指出这一点。我错误的是没有及早发现它。
答案 0 :(得分:3)
您应该在@XmlList
字段上使用p
注释。
@XmlList
public List<Integer> p;
<强>更新强>
以下是真的,我将不得不进一步调查原因。
javax.xml.bind.DatatypeConverter.parseInt("1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5") == 1291596391
如果我改变公共名单p;到公共列表p;然后呢 按预期正确输出[1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5]。
如果您将其更改为List<String>
,您将获得List
,其中一个条目为1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5
。使用@XmlList
注释,您将获得[1, 0, 0, 0, 0, 1, 2, 0, 2, 3, 1, 3, 1, 1, 4, 2, 1, 5]
的输出,表明它是包含许多项目的List
。