2010-06-24 16 views
7

Mam XmlJavaTypeAdapter zdefiniowane dla każdego wyjątku w mojej wyjątkowej heirarchii. Używam obiekt otoki dla Organizowanie wyjątki, jak poniżej: -@XmlJavaTypeAdapter w/Inheritance

@XmlRootElement 
public Wrapper<T extends BaseException> { 
    T exception; 
} 

Wyjątki: -

@XmlJavaTypeAdapter(BaseExceptionAdapter.class) { 
public class BaseException extends RuntimeException { 
} 


@XmlJavaTypeAdapter(DerivedExceptionAdapter.class) { 
public class DerivedException extends BaseException { 
} 

gdy próbuję Organizowanie obiekt wrapper, JAXB domyślnie zawsze wywołuje BaseExceptionAdapter nawet jeśli rzeczywisty wyjątek jest typu DerivedException. Jak zmusić go do szukania typu instancji wyjątku, a nie typu referencyjnego.

Tylko do dodania, package-info/jaxb.index itp. Są takie, jak z wyjątkiem.

Odpowiedz

0

Czy masz wszystkie podtypy wyjątków wymienione w pakiecie info/jaxb.index/newInitialContext (...)?

JAX-B przyjrzy się typowi instancji, ale uważam, że podtypy muszą być zarejestrowane w JAX-B. Nie wykryje adnotacji XMLJavaTypeAdapter w czasie wykonywania, musisz jawnie zarejestrować każdą podklasę przy pomocy JaxB.

Można to również osiągnąć za pomocą adnotacji @XmlSeeAlso z klasy zarejestrowanej w JAX-B.

1

Wygląda na to, że potrzebujesz pola @XmlElementRef na polu T, aby JAXB mógł dynamicznie to sprawdzić.