Если xml, который вы пытаетесь разобрать, имеет разные теги для описания car1 и car2, то это возможно с помощью аннотации @XmlElements
.
Я создаю небольшой пример ниже, чтобы показать его:
@XmlRootElement
public class SomeRoot {
@XmlElements({
@XmlElement(type = Car1.class, name = "car1"),
@XmlElement(type = Car2.class, name = "car2")
})
private List<Car> cars;
}
Затем ваш интерфейс:
public interface Car {
}
Базовый класс с некоторым общим полем:
@XmlAccessorType(XmlAccessType.FIELD)
public class BaseCar {
private String type;
}
И реализация для car1:
@XmlAccessorType(XmlAccessType.FIELD)
public class Car1 extends BaseCar implements Car {
private String car1SpecificField;
}
и car2:
@XmlAccessorType(XmlAccessType.FIELD)
public class Car2 extends BaseCar implements Car {
private String car2SpecificField;
}
Это приведет к разбивке xml ниже штрафа:
<someRoot>
<car1>
<type>some type</type>
<car1SpecificField>some value</car1SpecificField>
</car1>
<car2>
<type>other type</type>
<car2SpecificField>other value</car2SpecificField>
</car2>
</someRoot>
Если ваш xml имеет <car>
вместо <car1>
и <car2>
, вам нужно использовать адаптер, иначе jaxb не знает, какой класс нужно отменять.