jaxb: отображение иерархии классов
От: and_hom  
Дата: 10.12.10 14:01
Оценка:
здравствуйте!

есть xml-объекты вида
<object type="a" color="red"/>
<object type="b" someParam="10"/>


есть классы
public abstract class Base {
    @XmlAttribute
    protected String type;
}

public class A extends Base{
    @XmlAttribute
    protected String color;
}
public class B extends Base{
    @XmlAttribute
    protected int someParam;
}


хочется замаппить это дело при помощи jaxb
пробовал через XmlAdapter<Object, Base>, но на входе получается ElementNSImpl, который разбирать вручную ну совсем не хочется.
в идеале хочется получить такое же поведение, как у Hibernate со стратегией SingleTable и полем discriminatorValue.

есть ли способы?

спасибо!
Re: jaxb: отображение иерархии классов
От: dimok@  
Дата: 10.12.10 14:25
Оценка:
Пометить из разными @XmlRootElement например.
Почитать тут или тут.
Re: jaxb: отображение иерархии классов
От: Павел Сумароков Россия http://aldigit.com/
Дата: 11.12.10 08:16
Оценка:
Здравствуйте, and_hom, Вы писали:

_>есть xml-объекты

_>хочется замаппить это дело при помощи jaxb

Год назад опубликовал статью:

http://www.intelrate.com/articles/java/jaxb/

Надеюсь архитектура окажется полезной. Во всяком случае все возможный структуры рассмотрены. =)
Re[2]: jaxb: отображение иерархии классов
От: and_hom  
Дата: 13.12.10 08:06
Оценка:
увы, во всех примерах описывается ситуация, когда для дочерних классов в иерархии используются разные имена тегов. В моём случае тег всегда называется одинаково, но у него есть атрибут, который определяет формат содержимого.
Re[3]: jaxb: отображение иерархии классов
От: and_hom  
Дата: 13.12.10 08:16
Оценка:
Вот нашлось что-то похожее на нужное:
http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-moxy-extension.html

Смущает лишь то, что это делается не средствами jaxb, но собственный велосипед будет кривым и дорогим, скорее всего
Re[4]: jaxb: отображение иерархии классов
От: and_hom  
Дата: 13.12.10 12:49
Оценка:
тоже не оч хорошо оказалось. во-первых, при генерации обязательно выставляет discriminatorValue. То есть, нельзя сопоставить отсутствие дискриминатора определённому типу. во-вторых, настраивается со скрипом. пока что генерит, но не парсит
Re[3]: jaxb: отображение иерархии классов
От: Павел Сумароков Россия http://aldigit.com/
Дата: 26.12.10 10:18
Оценка:
Здравствуйте, and_hom, Вы писали:

_>увы, во всех примерах описывается ситуация, когда для дочерних классов в иерархии используются разные имена тегов. В моём случае тег всегда называется одинаково, но у него есть атрибут, который определяет формат содержимого.


Да, теперь понял. Jaxb в чистом виде не подойдёт. Если только взять исходники и переписать Marshaller / Unmarshaller чтобы он интерпретировал аннотации необходимым образом.

Лучше конечно попытаться упростить XML схему / модель данных.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.