2010-06-24 3 views
7

У меня есть XmlJavaTypeAdapter, определенный для каждого Исключения в моей исключительной иерархии. Я использую объект-оболочку для сортировочного исключения, как показано ниже: -@XmlJavaTypeAdapter w/Inheritance

@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 и так же исключены.

ответ

0

У вас есть все ваши подтипы исключения, перечисленные в пакете-info/jaxb.index/newInitialContext (...)?

JAX-B рассмотрит тип экземпляра, но я считаю, что подтипы должны быть зарегистрированы с помощью JAX-B. Он не обнаружит аннотацию XMLJavaTypeAdapter во время выполнения, вы должны явно зарегистрировать каждый подкласс с помощью JaxB.

Это также может быть выполнено с помощью аннотации @XmlSeeAlso из класса, зарегистрированного в JAX-B.

1

Похоже, вам нужно @XmlElementRef в вашем поле T, чтобы рассказать JAXB о динамическом динамическом просмотре.

Смежные вопросы