Как использовать java.util.Optional набора с jaxb
У меня возникают проблемы с адаптацией Optional
которая содержит Set
.
Первоначально у нас был Set внутри класса, который должен был быть привязан к XML как таковой:
@XmlElementWrapper(name = "items")
@XmlElement(name = "item")
public Set<Item> getItems()
{
return items;
}
Мы создаем схему из наших классов во время сборки maven. Однако это требование изменилось, и теперь Set
теперь должен быть завернут в Optional
но нам все равно нужна схема вывода, чтобы оставаться прежней.
@XmlElementWrapper(name = "items")
@XmlElement(name = "item")
@XmlJavaTypeAdapter(value = OptionalAdapter.class)
public Optional<Set<Item>> getItem()
{
return items;
}
После упаковки набора как такового я создал xml-адаптер:
public class OptionalAdapter extends XmlAdapter<Set<Item>,Optional<Set<Item>>>
{
@Override
public Optional<Set<Item>> unmarshal(final Set<Item> v) throws Exception
{
return Optional.ofNullable(v);
}
@Override
public Set<Item> marshal(final Optional<Set<Item>> v) throws Exception
{
return v.orElse(null);
}
}
После изменения классов schemagen
не работает (выход maven равен " null
", насколько я знаю, это известная проблема с помощью schemagen
).
Я попытался изменить адаптер для использования коллекции и удалить аннотацию XmlElementWrapper
из опционального, но не повезло. Мне было интересно, есть ли что-то еще, что нужно позаботиться, чтобы это правильно сгенерировало схему (и маршал/немаршал)?
Большое спасибо