Я имею XmlJavaTypeAdapter
определенный для каждого Исключения в моей иерархии исключения. Я использую интерфейсный объект для маршалинга исключений как указано ниже:
@XmlRootElement
public Wrapper<T extends BaseException> {
T exception;
}
Исключения:-
@XmlJavaTypeAdapter(BaseExceptionAdapter.class) {
public class BaseException extends RuntimeException {
}
@XmlJavaTypeAdapter(DerivedExceptionAdapter.class) {
public class DerivedException extends BaseException {
}
Когда я пытаюсь упорядочить интерфейсный объект, JAXB по умолчанию всегда звонит BaseExceptionAdapter
даже если фактическое исключение имеет тип DerivedException
. Как я могу вынудить это искать тип экземпляра исключения, а не ссылочного типа.
Только добавить, package-info
/ jaxb.index
и т.д. как исключены.
Все ли ваши подтипы исключения перечислены в package-info / jaxb.index / newInitialContext (...)?
JAX-B будет проверять тип экземпляра, но я считаю, что подтипы нуждаются в быть зарегистрированным в JAX-B. Он не обнаружит аннотацию XMLJavaTypeAdapter во время выполнения, вы должны явно зарегистрировать каждый подкласс в JaxB.
Этого также можно добиться с помощью аннотации @XmlSeeAlso из класса, зарегистрированного в JAX-B.