Стоит ли JAXB для небольшого количества POJO? - PullRequest
6 голосов
/ 26 июля 2011

Я реализую небольшой веб-сервис RESTful и решил, что верну XML-капли для представления ресурсов, которые довольно точно отображаются на некоторые классы Java, которые у меня есть.

Я мог бы создавать собственные XML-кодировщики для каждого класса, но я наткнулся на JAXB (который я никогда не использовал), и мне показалось, что это чистый способ избежать написания утомительной логики кодирования, которую я должен был бы синхронизировать если я добавлю новые свойства в любой из классов.

Итак, мой вопрос: JAXB слишком тяжеловес для чего-то такого простого? Стоит ли использовать это просто для отображения базовой структуры, коллекции bean-компонентов и т. Д. В XML-документе?

edit: я использую Джерси для создания сервиса.

Ответы [ 3 ]

7 голосов
/ 26 июля 2011

Примечание: Я являюсь лидером EclipseLink JAXB (MOXy) и членом группы экспертов JAXB ( JSR-222 ).

Если вы используете реализацию JAX-RS ( Джерси , RESTeasy , Wink и т. Д.) Для создания службы RESTful, тогда JAXB является привязкой по умолчанию слой и легко интегрируется:

Например, см .:

5 голосов
/ 26 июля 2011

JAXB также «поставляется бесплатно» с Java 6. Если у вас есть контроль над форматом XML (против принятия внешней схемы), тогда JAXB тривиально использовать, используя всего лишь несколько аннотаций и несколько очень простых маршаллингов.code.

Простой метод toXML:

    JAXBContext ctx = JAXBContext.newInstance(YourClass.class);

    Marshaller m = ctx.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    StringWriter sw = new StringWriter();
    m.marshal(waypointServer, sw);
    sw.close();
    return sw.toString();

XML Reader:

    URL url = new URL(filePath);

    JAXBContext ctx = JAXBContext.newInstance(YourClass.class);
    Unmarshaller um = ctx.createUnmarshaller();

    YourClass yc = (YourClass)um.unmarshal(url.openStream());

Простой bean-компонент:

@XmlRootElement
public class YourClass {
    List<Stuff> stuffList;
    String id;
    int cnt;

    // getters, setters
}

Может усложнитьсяочевидно, но из коробки это может быть действительно просто.

0 голосов
/ 26 июля 2011

У меня нет мнения о том, является ли JAXB "слишком" тяжеловесным, но если вы решите, что это так, и ищете альтернативный сериализатор XML, я настоятельно рекомендую XStream .

Это делает сериализацию / десериализацию настоящим куском пирога, поведение по умолчанию имеет смысл в большинстве случаев, и очень просто настроить вывод сериализации, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...