JAXB是否值得为少数小型POJO服务?

Sha*_* D. 6 java web-services jaxb

我正在实现一个小的RESTful Web服务,并且认为我将返回XML blob来表示资源,这些资源直接映射到我拥有的某些Java类.

我可以为每个类做自定义XML编码器,但我偶然发现了JAXB(我从未使用过),这似乎是一种避免编写繁琐的编码逻辑的简洁方法,如果我添加的话我必须保持同步任何类的新属性.

所以,我的问题是: JAXB对于像这样简单的东西来说太重了吗?是否值得使用将基本结构,bean集合等映射到XML文档?

编辑:我正在使用Jersey来构建服务.

bdo*_*han 7

注意: 我是EclipseLink JAXB(MOXy)的负责人,也是JAXB(JSR-222)专家组的成员.

如果您使用JAX-RS实现(Jersey,RESTeasy,Wink等)来创建RESTful服务,那么JAXB是默认的绑定层并无缝集成:

有关示例,请参阅:

  • 谢谢.我简直不敢相信这是多么容易.在这里,我想我必须自己构建和序列化XML. (2认同)

Wil*_*ung 5

JAXB也可以"免费"使用Java 6.如果您可以控制XML格式(而不必采用外部模式),那么使用JAXB只需要几个注释和一些非常简单的编组代码就可以轻松使用.

简单的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();
Run Code Online (Sandbox Code Playgroud)

XML阅读器:

    URL url = new URL(filePath);

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

    YourClass yc = (YourClass)um.unmarshal(url.openStream());
Run Code Online (Sandbox Code Playgroud)

简单的豆子:

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

    // getters, setters
}
Run Code Online (Sandbox Code Playgroud)

显然,它会变得更复杂,但开箱即用它可以非常简单.