简单的,结构类型的XML数据绑定(无需代码生成或反射)

时间:2010-07-15 11:12:59

标签: java xml-serialization xsd

我正在寻找一个允许我将XML编组到Java对象树的Java库,反之亦然。有很多库允许我将XML绑定到由某些代码生成工具生成的 JavaBeans ,但是,我不需要那些(JAXB,JiBX,Castor等)。

我需要的是一个使用模式文件和xml文件然后以类似于Jackson's simple data binding(当然有可能)。 Jackson适用于JSON,不适用于XML;并且它缺乏在帐户中获取模式文件的能力(因为JSON模式目前还太不成熟)。

我可以调整一些现有的工具来解决我的问题,还是应该用DOM和XSOM推出自己的解决方案?

2 个答案:

答案 0 :(得分:1)

MOXy的动态JAXB

MOXy提供动态JAXB实现。您可以从XML模式引导,而不是静态类,您可以使用泛型get / set方法与DynamicEntity实例进行交互:

FileInputStream xsd = new FileInputStream("src/example/customer.xsd");
DynamicJAXBContext jaxbContext = 
    DynamicJAXBContextFactory.createContextFromXSD(xsd, null, null, null);

FileInputStream xmlInputStream = new FileInputStream("src/example/dynamic/customer.xml");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);

System.out.println(customer.<String>get("name"));

有关详细信息,请参阅:

服务数据对象(SDO)

您也可以使用服务数据对象(JSR-235)。

FileReader xsd = new FileReader("customer.xsd");
XSDHelper.INSTANCE.define(xsd, null);

FileReader xml = new FileReader("input.xml");
XMLDocument doc = XMLHelper.INSTANCE.load(xml, null, null);

DataObject customerDO = doc.getRootObject();
int id = customerDO.getInt("id");
DataObject addressDO = customerDO.getDataObject("contact-info/address");

有关详细信息,请参阅:

答案 1 :(得分:0)

看起来像SOAP。 一个选项是Apache Axis(我们经常使用它),但还有其他实现。