@XmlJavaTypeAdapter и оболочки - PullRequest
       26

@XmlJavaTypeAdapter и оболочки

2 голосов
/ 10 декабря 2010

Я не хочу использовать XmlJavaTypeAdapter аннотации с классом XmlAdapter в моем коде напрямую. Итак, я написал какую-то обертку:

class BinderWrapper<MODEL, BEAN> extends XmlAdapter<BEAN, MODEL>{
    private final Binder<MODEL, BEAN> target;
    private BinderWrapper(Binder<MODEL, BEAN> target){
        this.target = target;
    }
    static <MODEL, BEAN> BinderWrapper<MODEL, BEAN> createInstance(Binder<MODEL, BEAN> binder){
        return new BinderWrapper<MODEL, BEAN>(binder);
    }
    @Override
    public MODEL unmarshal(BEAN v) throws Exception {
        return target.unBean(v);
    }
    @Override
    public BEAN marshal(MODEL v) throws Exception {
        return target.toBean(v);
    }
}

это окутывает мои связующие как XmlAdapter с. Все мои связующие будут реализованы Binder интерфейс

public interface Binder<MODEL, BEAN> {
    MODEL unBean(BEAN bean);
    BEAN toBean(MODEL model);
}

Но есть проблема. @XmlJavaTypeAdapter требует класс XmlAdapter без какой-либо оболочки. Как я могу решить эту проблему? - использовать другую аннотацию / написать некоторую конфигурацию / написать некоторую волшебную аннотацию / ..

Спасибо.

UPD

У меня есть классы моделей, которые не JavaBeans . Поэтому я хочу сделать два шага отображения: в bean-компонентах и ​​затем в xml. Я хочу сделать первый шаг с аннотациями тоже. Наверное, мне нужны эти бобы не только для JAXB . Реальный вопрос: могу ли я сделать первый шаг с некоторыми аннотациями не JAXB ?

1 Ответ

2 голосов
/ 10 декабря 2010

У меня есть классы моделей, которые не JavaBeans. Поэтому я хочу сделать два шага отображение: в бобах, а затем в XML. Я хочу сделать первый шаг с аннотациями тоже. Наверное, мне очень нужны эти бобы не только для JAXB. Настоящий вопрос является: я могу сделать первый шаг с некоторыми JAXB аннотации?

XmlAdapter обеспечивает двухэтапное сопоставление, которое вы ищете. Если вы посмотрите на приведенный ниже пример Карта - это объект, который не является Java Bean. XmlAdapter конвертирует его в Java-бин, который можно отобразить.

Возможно, вам будет проще использовать аннотацию @XmlJavaTypeAdapter на уровне типа, а не на уровне свойств. При использовании на уровне типа вы говорите всем, что ссылки на этот класс должны использовать адаптер вместо свойства. См. Мой пост по JAXB и неизменным объектам для примера уровня типа.

Для получения дополнительной информации см .:

...