@XmlJavaTypeAdapter w/Inheritance

Din*_*lay 7 java jaxb

XmlJavaTypeAdapter在异常heirarchy中为每个Exception定义了一个.我使用包装器对象来编组例外如下: -

@XmlRootElement
public Wrapper<T extends BaseException> {
    T exception;
}
Run Code Online (Sandbox Code Playgroud)

例外: -

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


@XmlJavaTypeAdapter(DerivedExceptionAdapter.class) {
public class DerivedException extends BaseException {
}
Run Code Online (Sandbox Code Playgroud)

当我尝试封送包装器对象时,默认情况下,JAXB总是BaseExceptionAdapter在实际异常是类型时调用偶数DerivedException.如何强制它查找异常的实例类型而不是引用类型.

只是添加,package-info/ jaxb.indexetc是例外.

EdC*_*EdC 0

您是否在 package-info / jaxb.in​​dex / newInitialContext(...) 中列出了所有异常子类型?

JAX-B 将查看实例类型,但我相信子类型需要向 JAX-B 注册。它不会在运行时发现 XMLJavaTypeAdapter 注释,您必须向 JaxB 显式注册每个子类。

这也可以通过使用 JAX-B 注册的类的 @XmlSeeAlso 注释来完成。