我正在寻找一个允许我将XML编组到Java对象树的Java库,反之亦然。有很多库允许我将XML绑定到由某些代码生成工具生成的 JavaBeans ,但是,我不需要那些(JAXB,JiBX,Castor等)。
我需要的是一个使用模式文件和xml文件然后以类似于Jackson's simple data binding(当然有可能)。 Jackson适用于JSON,不适用于XML;并且它缺乏在帐户中获取模式文件的能力(因为JSON模式目前还太不成熟)。
我可以调整一些现有的工具来解决我的问题,还是应该用DOM和XSOM推出自己的解决方案?
答案 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(我们经常使用它),但还有其他实现。