Я работаю над веб-сервисом, использующим spring-mvc и Jaxb2Marshaller.
У меня есть два класса, оба аннотированных с одинаковым @XmlRootElement
именем
@XmlRootElement(name="request")
class Foo extends AstractRequest {
}
@XmlRootElement(name="request")
class Bar extends AbstractRequest {
}
Все три класса (AbstractRequest, Foo, Bar) включены в список classesToBeBound в том же порядке
Теперь запрос, который использует Bar, работает нормально. Но тот, который использует Foo, выдает исключение ClassCastException во время отмены сортировки с сообщением Bar cannot be cast to Foo
Код контроллера такой,
Source source = new StreamSource(new StringReader(body));
Foo request = (Foo) this.jaxb2Marshaller.unmarshal(source);
Я думаю, это происходит потому, что Bar является своего рода переопределением Foo, поскольку оно записано после Foo в списке классов, которые должны быть связаны в файле spring-servlet.xml
Однако у меня также есть несколько классов, помеченных @XmlRootElement(name="response")
, и маршалинг ответа не доставляет никаких проблем.
Есть ли способ указать класс, который будет использоваться jaxb2Marshaller для демаршаллинга?