JAXB: Как реализовать JAXB-совместимый вариантный класс-оболочку? - PullRequest
1 голос
/ 20 июля 2011

Как я могу реализовать "вариантный" класс, который будет действовать как адаптер между объектными и JAXB-поддерживаемыми типами?

Я мог бы затем использовать Object в JAXB-аннотированных классах.

Поэтому, я думаю, мне нужно было бы хранить идентификатор типа внутри этого адаптера.

Любые идеи?

ПРИМЕЧАНИЕ. С "типами, поддерживаемыми JAXB", я имею в виду типытакие как:
все типы примитивов, String, Date, byte[], List<any-JAXB-supported-type>.

Сценарий использования

@XmlType
class SomeClass {
    @XmlJavaTypeAdapter(VariantAdapter.class) // WITH OR WITHOUT?
    @XmlElement
    private Object somePrimitive = null;

    // ...
}

Вариант псевдокода идеи класса

@XmlRootElement
@XmlType
class Variant {
    @XmlAttribute
    private final String typeID;
    @XmlAttribute
    private final String rawXML;

    // ...
}

Класс адаптера (тривиальный)

class VariantAdapter extends XmlAdapter<Object, Variant> {
    @Override
    public Object marshal(VariantObject arg0) throws Exception {
        // ...
    }

    @Override
    public VariantObject unmarshal(Object arg0) throws Exception {
        // ...
    }
}

1 Ответ

0 голосов
/ 20 июля 2011

Это уже существует: См. JAXBElement

Или для Коллекций и Карты:

Проект, полученный из утилиты apl

...