整数解组列表不正确

时间:2013-08-14 16:56:55

标签: java xml jaxb

我的代码工作正常一段时间。我改变了一些东西,现在我有一些整数列表,它们不再正确解组。为了尝试解决这个问题,我将整个问题归结为以下问题,问题仍然存在。

我已将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指出这一点。我错误的是没有及早发现它。

1 个答案:

答案 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