实现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将无法使用任何类没有约束。