我正在实现一个小型RESTful Web服务,并且认为我将返回XML blob来表示资源,这些资源直接映射到我拥有的一些Java类。
我可以为每个类做自定义XML编码器,但我偶然发现了JAXB(我从未使用过),这似乎是一种避免编写繁琐的编码逻辑的简洁方法,我必须保持同步如果我向任何类添加新属性。
所以,我的问题是: JAXB对于像这样简单的事情来说太重了吗?是否值得将基本结构,bean集合等映射到XML文档?
编辑:我正在使用Jersey来构建服务。
答案 0 :(得分:7)
注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB(JSR-222)专家组的成员。
如果您正在使用JAX-RS实现(Jersey,RESTeasy,Wink等)来创建RESTful服务,那么JAXB是默认绑定层并无缝集成:< / p>
有关示例,请参阅:
答案 1 :(得分:5)
简单的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。
它使序列化/反序列化真正的蛋糕,默认行为在大多数情况下都有意义,如果需要,自定义序列化的输出非常简单。