2

我的代码在一段时间内运行良好。我改变了一些东西,现在我有了一些不再正确解组的整数列表。为了尝试解决问题,我将整个事情归结为以下内容,但问题仍然存在。

我已将我的 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]按预期正确输出。所以它正确地获取 aList<String>但不是 a List<Integer>List<Integer>它工作正常,几天前在完整的生产项目中正确获得,但现在不行了。

(编辑)实际上,该List<String>版本也不起作用。数字之间没有逗号,这意味着它没有显示多个字符串的列表,每个字符串代表一个不同的数字。相反,它仍然是代表整个事物的 1 个字符串。

谢谢你,布莱斯,指出这一点。我没有早点注意到它的错误。

4

1 回答 1

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包含许多项目的输出。

于 2013-08-14T17:15:52.337 回答