spring-mvc と Jaxb2Marshaller を使用して Web サービスに取り組んでいます。
2 つのクラスがあり、両方に同じ@XmlRootElement
名前の注釈が付けられています
@XmlRootElement(name="request")
class Foo extends AstractRequest {
}
@XmlRootElement(name="request")
class Bar extends AbstractRequest {
}
3 つのクラス (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);
spring-servlet.xml ファイルでバインドされるクラスのリストで Foo の後に記述されているため、Bar が Foo をオーバーライドしているため、これが発生していると思います。
ただし、複数のクラスに注釈が付けられて@XmlRootElement(name="response")
おり、応答をマーシャリングしても問題はありません。
非整列化のために jaxb2Marshaller が使用するクラスを指定する方法はありますか?