クライアントの応答でJerseyGenericListを取得する際の問題に直面しています。なんらかの理由でエンティティとして取得する必要があります。
@XmlRootElement(name="list")
@XmlSeeAlso({RESTDomain.class})
public class JAXBContainer<T> {
private List<T> items = new ArrayList<T>();
public JAXBContainer() { }
public JAXBContainer(List<T> items) {
this.items = items;
}
@XmlElementWrapper(name="items")
@XmlAnyElement(lax=true)
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
@XmlAttribute
public int getItemsSize() {
return this.items.size();
}
上記は私の一般的なリストです
@GET
@Produces({MediaType.APPLICATION_XML})
public Response getREST(){
RESTDomain domain = new RESTDomain();
domain.setName("Adams");
domain.setPlace("Zurich");
List<RESTDomain> restDomains = new ArrayList<RESTDomain>();
restDomains.add(domain);
JAXBContainer<RESTDomain> jAXBContainer= new JAXBContainer<RESTDomain>(restDomains);
GenericEntity<JAXBContainer<RESTDomain>> genericEntity = new GenericEntity<JAXBContainer<RESTDomain>>(jAXBContainer){};
return Response.ok(genericEntity).build();
}
genericEntityでコンテナを返します。genericEntity内のリストだけでクライアントでエンティティを取得できることはわかっていますが、問題は、何らかの理由でJAXBContainerを使用する必要があることです。
@Test
public void restGet() throws JAXBException{
ClientConfig cc = new DefaultClientConfig();
client = Client.create(cc);
String baseURI ="http://localhost:3555/SampleREST/rest/sample";
WebResource webResource = client.resource(baseURI);
JAXBContainer<RESTDomain> jAXBContainer= webResource.get(new GenericType<JAXBContainer<RESTDomain>>(){});
System.out.println("response:: "+jAXBContainer.getItemsSize());
}
私の問題は、必要に応じてGenericTypeを使用してJAXBContainerとして応答を取得することですが、コンテナーのサイズは0です。ここで何が欠けていますか?マーシャリングおよび非マーシャリングメカニズムを使用する必要がありますか?
しかし、ブラウザでこのURIを要求すると、整形式のXMLが得られますが、クライアントで失敗するか、クライアントでエンティティを抽出する他の方法がありますか。前もって感謝します