Использование Jaxb2Marshaller с несколькими классами с одинаковым именем @XmlRootElement

Я работаю над веб-сервисом, использующим 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 не может быть преобразован в 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 для демаршаллинга?

10
задан ROMANIA_engineer 16 April 2015 в 21:47
поделиться