Неправильный аргумент XmlAdapter пуст - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть Java bean:

@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = false)
@XmlRootElement(name = "AUTORIZZATI")
@XmlAccessorType(XmlAccessType.FIELD)
public final class Authorization extends XmlAdapter<ArrayList<Authorization.Event>, HashMap<Integer,     Authorization.Event>> implements Serializable
{
        @XmlAttribute(name = "SUBISO")
        private String subIso;

        @XmlElement(name = "EVENTO")
        @XmlJavaTypeAdapter(MyAdapter.class)
        private HashMap<Integer, Authorization.Event> events;
}

Это класс MyAdapter:

@Override
public final ArrayList<Event> marshal(final HashMap<Integer, Event> v) throws Exception
{
    return new ArrayList<>(v.values());
}

@Override
public final HashMap<Integer, Event> unmarshal(final ArrayList<Event> v) throws Exception
{
    return new HashMap<>(v.stream().collect(Collectors.toMap(Event::getId, item -> item)));
}

Событие - это еще один bean-компонент, который корректно не маршалируется, если член "events" Список и без адаптера, вот так:

private List<Authorization.Event> events;

Он работает даже с абстрактными типами, но не с адаптером Xml (выдает ошибку, говорящую, что тип должен быть конкретным).

Почему мой адаптер не работает? Если я напечатаю аргумент "v" внутри метода "unmarshal", он покажет пустой список (не ноль!). Но если я не включаю какой-либо адаптер в элемент «events», а типом является List (абстрактный), то специализированным типом является «ArrayList» !!!

Почему это происходит? Я не вижу ничего плохого здесь! Заранее спасибо!

...