2016-06-14 9 views
1

JAXBContextリゾルバクラスを実装しようとしています。私が理解していないことは、どのタイプのクラスがcTypesに含まれているかです。私はいくつかの同様の例を見てきましたが、どれも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は、束縛されていない。

関連する問題