Проблемы с отключением JAXB

#web-services #inheritance #jaxb

#веб-службы #наследование #jaxb

Вопрос:

Проблема, связанная с наследованием JAXB:

  1. Я создаю веб-сервис, который имеет в качестве параметра суперкласс.
  2. При вызове веб-сервиса клиент передает подкласс в качестве фактического параметра
  3. Сообщение 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); 
  

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