Java 作为子类的JAXB封送处理字段

Java 作为子类的JAXB封送处理字段,java,json,jaxb,Java,Json,Jaxb,我有一个包装类,它的属性类型是几个子类的超类。我想封送到JSON,并为该字段封送子类。当我这样做时,我得到一个错误: java.lang.IllegalStateException:无效的JSON命名空间: 具体来说,我有一个“包装器”类,其“结果”字段的类型为超类,但它始终是某个子类(“下面的子类”)的实例。如果我让我的包装类将其“result”字段定义为子类类型“subclass”,它可以正常工作,但是当它是“SuperClass”类型,但子类的实例时,我会得到错误 这里有我可以使用的注释吗

我有一个包装类,它的属性类型是几个子类的超类。我想封送到JSON,并为该字段封送子类。当我这样做时,我得到一个错误:

java.lang.IllegalStateException:无效的JSON命名空间:

具体来说,我有一个“包装器”类,其“结果”字段的类型为超类,但它始终是某个子类(“下面的子类”)的实例。如果我让我的包装类将其“result”字段定义为子类类型“subclass”,它可以正常工作,但是当它是“SuperClass”类型,但子类的实例时,我会得到错误

这里有我可以使用的注释吗?我需要做一些定制的封送员吗

public class JsonText {

    @XmlRootElement
    public static class SuperClass {
    }

    @XmlRootElement
    public static class SubClass extends SuperClass {
        private int val;
        public int getVal() {return val; }
        public void setVal(int i) {
            val = i;
        }
    }

    @XmlRootElement
     public static class ErrorMessage {
        private String msg;
        public String getMsg() { return msg; }
        public void setMsg(String s) { msg = s;}
    }

    @XmlRootElement
    public static class Wrapper {
        private SuperClass result;
        private ErrorMessage error;
        public SuperClass getResult() { return result; }
        public void setResult(SuperClass sc) { result = sc; }
        public ErrorMessage getError() { return error; }
        public void setError(ErrorMessage e) { error = e; }
    }


    public static void main(String[] args) throws Exception{
        ErrorMessage err = new ErrorMessage();
        err.setMsg("my error");

        SubClass sc = new SubClass();
        sc.setVal(1);

        Wrapper wrapper = new Wrapper();
        wrapper.setResult(sc);
        wrapper.setError(err);

        JAXBContext jc = JAXBContext.newInstance(SuperClass.class, SubClass.class, Wrapper.class);

        Configuration config = new Configuration();
        MappedNamespaceConvention con = new MappedNamespaceConvention config);
        StringWriter writer = new StringWriter();
        XMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(wrapper, xmlStreamWriter);

        System.out.println(writer.toString());

    }
}

您能提供错误的整个堆栈跟踪吗?