JAXB или Xstream на Джерси Restful приложении - PullRequest
2 голосов
/ 04 января 2012

Я хочу знать, какое решение лучше для веб-службы Jersey Rest. В некоторых случаях JAXB не может обрабатывать некоторые типы. Лучше использовать XStream?

Ответы [ 2 ]

8 голосов
/ 04 января 2012

Примечание: Я 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 на Джерси см .:

3 голосов
/ 04 января 2012

Зависит от вашего варианта использования - если вы считаете, что JAXB будет существенным ограничением, вы можете использовать XStream.Кстати, Джерси недавно добавил поддержку MOXy, которая может помочь вам преодолеть некоторые угловые случаи в JAXB Reference impl в JDK.

Pro JAXB

  • из коробки с функциональностью Jersey
  • возможность указать собственный JAXBContext
  • stable;много тестов / поддержки от команды Джерси / JAXB

Con JAXB

  • это не работает, как ожидалось, для некоторых угловых случаев (привязка java / xml имеет ограничения из-заразличная природа этих языков)

Pro XStream:

  • у вас, вероятно, есть некоторый опыт с этим

Con XStream:

  • вам потребуется реализовать поддержку (MessageBodyReaders / Writers) в Джерси
...