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

时间:2011-07-26 15:56:21

标签: java web-services jaxb

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

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

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

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

3 个答案:

答案 0 :(得分:7)

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

如果您正在使用JAX-RS实现(JerseyRESTeasyWink等)来创建RESTful服务,那么JAXB是默认绑定层并无缝集成:< / p>

有关示例,请参阅:

答案 1 :(得分:5)

使用Java 6,JAXB也“免费”。如果您可以控制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();

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
}

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

答案 2 :(得分:0)

我对JAXB是否“太”重量级没有意见,但如果你得出结论并且你正在寻找替代的XML序列化器,我强烈推荐XStream

它使序列化/反序列化真正的蛋糕,默认行为在大多数情况下都有意义,如果需要,自定义序列化的输出非常简单。