实现JAXBContext解析器类:列表中存储了哪些类?
问题描述:
我想实现一个JAXBContext解析器类。我不明白的是cType中包含了哪些类?我见过几个类似的例子,但没有解释cTypes列表是什么。实现JAXBContext解析器类:列表中存储了哪些类?
@Provider
public class JaxbContextResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Set<Class<?>> types;
private final Class<?>[] cTypes = {Flights.class, FlightType.class, AircraftType.class};
public JaxbContextResolver() throws Exception {
this.types = new HashSet<Class<?>>(Arrays.asList(cTypes));
this.context = new JettisonJaxbContext(JettisonConfig.DEFAULT, cTypes);
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) ? context : null;
}
}
答
你的ctypes类列表必须包含表示根XML元素(那些你@XmlRootElement注释)所有类。
说明:
当您创建的JAXBContext,你给它的类的列表绑定:
this.context = new JettisonJaxbContext(JettisonConfig.DEFAULT, cTypes);
这将使JAXB能够真正的元素与类关联。 JAXB将自动绑定根元素类中包含的任何类(除了注释@XmlTransient)。
然后,当使用getContext方法时,只有当参数类已被JAXB绑定到所述上下文时,才会返回类中的已初始化上下文,因为您的JAXBContext将无法使用任何类没有约束。