#web-services #inheritance #jaxb
#веб-службы #наследование #jaxb
Вопрос:
Проблема, связанная с наследованием JAXB:
- Я создаю веб-сервис, который имеет в качестве параметра суперкласс.
- При вызове веб-сервиса клиент передает подкласс в качестве фактического параметра
- Сообщение SOAP, отправляемое на сервер, содержит xsi:type=»ns: подкласс»
Вопрос в том, как отменить сопоставление переданного параметра суперклассу, но сохранить тип времени выполнения параметра как подкласс?
Я искал похожие вопросы в stackoverflow, но предлагаемые решения для меня не работают.
Ответ №1:
Для этого варианта использования вы должны убедиться, что JAXBContext
известно обо всех подтипах. Вы можете сделать это, передав их при создании JAXBContext:
JAXBContext jc = JAXBContext.newInstance(Square.class, Circle.class);
Или используйте @XmlSeeAlso
аннотацию к суперклассу, чтобы все подклассы вводились автоматически:
@XmlSeeAlso({Square.class, Circle.class)
public class Shape {
}
JAXBContext jc = JAXBContext.newInstance(Shape.class);
Для получения дополнительной информации