2016-06-14 60 views
1

我想實現一個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; 
    } 
} 

回答

1

你的ctypes類列表必須包含表示根XML元素(那些你@XmlRootElement註釋)所有類。

說明:

當您創建的JAXBContext,你給它的類的列表綁定:

this.context = new JettisonJaxbContext(JettisonConfig.DEFAULT, cTypes); 

這將使JAXB能夠真正的元素與類關聯。 JAXB將自動綁定根元素類中包含的任何類(除了註釋@XmlTransient)。

然後,當使用getContext方法時,只有當參數類已被JAXB綁定到所述上下文時,纔會返回類中的已初始化上下文,因爲您的JAXBContext將無法使用任何類沒有約束。

相關問題