У меня есть класс A, с подклассами B и C.
Кроме того, я использую аннотацию XmlJavaTypeAdapters в файле package-info.java. В нем я указываю адаптеры для B и C
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value = BAdapter.class, type = B.class),
@XmlJavaTypeAdapter(value = CAdapter.class, type = C.class)
})
package xyz;
В классе в пакете xyz, который должен быть сериализован с JAXB, я пишу это:
@XmlElementWrapper(name = "entries")
@XmlElements({ @XmlElement(name = "b-entry", type = B.class),
@XmlElement(name = "c-entry", type = C.class) })
private List<A> entries = new ArrayList<>();
Эта конструкция в целом всегда работает, когда не требуются адаптеры XML. Однако теперь кажется, что JAXB не использует определенные адаптеры XML для типов @XmlElement. Он пытается сериализовать «b-entry» и «c-entry» без адаптеров, что не удается.
У меня есть много других XmlAdapters на уровне пакета, все они работают, если вы не используете их с @ XmlElements.
Это ошибка или недостаток JAXB? Мой подход неверен?
Обратите внимание, что я должен использовать аннотацию на уровне пакета, я не могу аннотировать непосредственно в классе.