2010-06-24 16 views
7

Tengo un XmlJavaTypeAdapter definido para cada excepción en mi jerarquía de excepciones. Yo uso un objeto contenedor para el cálculo de referencias de las excepciones de la siguiente manera: -@XmlJavaTypeAdapter w/Herencia

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

Las excepciones: -

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


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

Cuando intento cálculo de referencias de un objeto envoltorio, JAXB por defecto siempre llama la BaseExceptionAdapter incluso si el actual la excepción es de tipo DerivedException. ¿Cómo puedo forzarlo a buscar el tipo de instancia de la excepción en lugar del tipo de referencia?

Solo para agregar, package-info/jaxb.index etc. están exceptuados.

Respuesta

0

¿Tiene todos sus subtipos de excepción enumerados en package-info/jaxb.index/newInitialContext (...)?

JAX-B buscará el tipo de instancia, pero creo que los subtipos deben registrarse con JAX-B. No descubrirá la anotación XMLJavaTypeAdapter en el tiempo de ejecución, tiene que registrar explícitamente cada subclase con JaxB.

Esto también se puede lograr con la anotación @XmlSeeAlso de una clase que está registrada con JAX-B.

1

Parece que necesita un @XmlElementRef en su campo T, para decirle a JAXB que lo busque de forma dinámica.