В настоящее время я пытаюсь десериализовать входящий XML для объектов, сгенерированных из XSD.К сожалению, кажется, что есть проблема при попытке десериализации сгенерированного элемента выбора.Я перепробовал довольно много вещей, и я только что реализовал очень простой пример, который можно увидеть здесь .Каждый раз я получаю одно и то же исключение.Реализация выглядит следующим образом:
public static void main(final String[] args) throws IOException {
final String xml =
"<Foo> \n" +
" <A> 1 </A>\n" +
" <B> 2.5 </B>\n" +
"</Foo>";
final XmlMapper xmlMapper = new XmlMapper();
final Foo foo = xmlMapper.readValue(xml, Foo.class);
}
public static class Foo {
@XmlElementRefs({
@XmlElementRef(name = "A", type = Integer.class),
@XmlElementRef(name = "B", type = Float.class)
})
public List items;
}
В моем приложении вместо явных типов каждому элементу присваивается базовый тип JAXBElement.Исключение, которое я получаю:
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "A" (class x.y.z.Application$Foo), not marked as ignorable (one known property: "items"])
at [Source: (StringReader); line: 2, column: 15] (through reference chain: x.y.z.Application$Foo["A"])
Кажется, что он просто ищет поле с заданным именем, пытаясь установить значение, которого, конечно, не существует.
IЗдесь встречались сопоставимые вопросы, в которых указывались ответы, что вы должны добавить конфигурацию, чтобы игнорировать неизвестное, а это не то, что я хочу.Я ожидаю, что список будет содержать два элемента в конце, а именно два числа.
Я также видел расширение, называемое Simplify, чтобы сгенерировать поле списка для каждого элемента выбора.В моем случае я бы предпочел, чтобы все было добавлено в единый список.