Примечание: Я EclipseLink JAXB (MOXy) и член JAXB (JSR-222) экспертная группа.
Я хочу знать, какое решение лучше подходит для веб-службы Jersey Rest.
JAXB (JSR-222) - уровень привязки по умолчанию для JAX-RS. Это означает, что если у вас есть следующий метод, JAXB будет автоматически использоваться для преобразования типа возвращаемого значения (Customer
) в XML (и JSON при использовании Джерси).
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
Если вам нужен больший контроль над JAXBContext, вы можете использовать механизм JAX-RS под названием ContextResolver
:
В некоторых случаях JAXB не может обрабатывать некоторые типы
JAXB может обрабатывать все типы, по умолчанию или с помощью XmlAdapter
. Ниже приведены некоторые примеры, где XmlAdapter
используется с типами Joda-Time и некоторыми неизменяемыми объектами домена:
Лучше использовать XStream?
Ниже приведена ссылка на запись в блоге, которую я написал, в которой я сопоставил одну и ту же объектную модель с одним и тем же XML-документом, используя JAXB и XStream, которые могут вас заинтересовать:
Реализации JAXB, такие как MOXy, также содержат много расширений, которые вы найдете полезными, например отображение на основе XPath (@XmlPath
) и документ внешнего отображения:
Пример использования MOXy в качестве поставщика JAXB на Джерси см .: