这取决于您如何创建JAXBContext。该newInstance方法可以与所有的类的显式列表被调用,该方法的文档也给出了类似的例子。
客户端应用程序必须提供新上下文对象需要识别的类的列表。新上下文不仅会识别所有指定的类,而且还将识别从指定类直接/间接静态引用的任何类。引用类的子类或@XmlTransient引用类的子类均未在JAXBContext中注册。例如,在以下Java代码中,如果执行newInstance(Foo.class),则新创建的JAXBContext将识别Foo和Bar,但不能识别Zot或FooBar:
class Foo { @XmlTransient FooBar c; Bar b;}class Bar { int x; }class Zot extends Bar { int y; }class FooBar { }
编辑:
如果您至少知道潜在jaxb类的程序包名称,则还可以给定上下文路径来创建上下文。
如果上述方法不可行,您还可以在运行时根据要序列化的对象创建类列表。我认为最好尝试重构您的代码以使其不必要。以下代码未经测试:
Set<Class> classes = new HashSet<Class>();classes.add(p.getClass());for (A a : p.getThings()) { classes.add(a.getClass());}JAXBContext context = JAXBContext.newInstance(classes.toArray(new Class[classes.size()]));
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)