У меня была та же проблема: я получил извлеченные объекты (уже с реальными данными) из уровня персистентности, но они были из сторонних классов, которые я не мог ни аннотировать с помощью @XmlRootElement
, ни изменять код выборки.
Мне, просто завернув их в JAXBElement
, удалось.Итак, метод RESTful:
@GET
@Path("/listAll")
@Produces(MediaType.APPLICATION_XML); // "application/xml"
public List<Person> getPersonList() {
return persistenceLayer.fetchAllPerson();
}
Работает при изменении на:
@GET
@Path("/listAll")
@Produces(MediaType.APPLICATION_XML); // "application/xml"
public List<JAXBElement<Person>> getPersonList() {
List<Person> ps = persistenceLayer.fetchAllPerson();
List<JAXBElement<Person>> jaxbeps = new ArrayList<JAXBElement<Person>>(ps.size());
for (Person p : ps) {
jaxbeps.add(jaxbeWrapp(p));
}
return jaxbeps;
}
и используется общий метод (вы, конечно, можете просто встроить его):
public static <T> JAXBElement<T> jaxbeWrapp(T obj) {
Class<T> clazz = (Class<T>) obj.getClass();
return new JAXBElement<T>(new QName(obj.getClass().getName().toLowerCase()), clazz, obj);
}
Вот и все!Надеюсь, это поможет!