我在异常heirarchy中为每个Exception定义了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 {
}
当我尝试封送包装器对象时,默认情况下,即使实际异常类型为BaseExceptionAdapter
,JAXB也会始终调用DerivedException
。如何强制它查找异常的实例类型而不是引用类型。
只需添加,package-info
/ jaxb.index
等也是例外。
答案 0 :(得分:1)
看起来你的T字段需要@XmlElementRef,告诉JAXB动态查找。
答案 1 :(得分:0)
您是否在package-info / jaxb.index / newInitialContext(...)中列出了所有异常子类型?
JAX-B将查看实例类型,但我相信子类型需要使用JAX-B注册。它不会在运行时发现XMLJavaTypeAdapter注释,您必须使用JaxB显式注册每个子类。
这也可以通过使用JAX-B注册的类中的@XmlSeeAlso注释来完成。