Мой код работал нормально. Я изменил некоторые вещи, и теперь у меня есть несколько списков целых чисел, которые уже не разборчивы. Чтобы попытаться избавиться от этой проблемы, я полностью переварил все, и проблема все еще сохраняется.Неверный код для целого числа
Я сократил свой файл 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 строка, представляющая все это.
Благодарим вас, Блейз, за то, что указали это. Моя ошибка за то, что не заметила это раньше.
Почему это иногда работает без XmlList, но иногда оно не работает и требует его? Или, может быть, лучший вопрос: если он работает без аннотации XmlList, это технически неправильное поведение, на которое я не должен рассчитывать и поэтому всегда включать аннотацию в этой ситуации? – Loduwijk
@Loduwijk - Я не могу представить, как это иногда срабатывает. Только два способа преобразования элементов, разделенных пробелами, в «Список» - либо использовать '@ XmlList', либо' @ XmlValue' в свойстве «Список». –
О, ох! Я даже не понял, что версия String не содержит запятых, что действительно означает, что это тоже список с 1 элементом. Виноват. Тем не менее, поскольку он работал раньше, в соответствии с тем, что вы говорите, он должен иметь аннотацию XmlList, если он работает правильно. Я просто предполагаю, что у меня был XmlList и удалил его в какое-то время в недавнем прошлом.Я не знаю, почему я сделал бы это, и я не помню, чтобы это делал, но я просто предполагаю, что должен. – Loduwijk