Java 简单、结构化的XML数据绑定(无代码生成或反射)
我正在寻找一个Java库,它允许我将XML封送到Java对象树,反之亦然。有很多库允许我将XML绑定到一些代码生成工具生成的JavaBean,但是,我不需要这些库(JAXB、JiBX、Castor等等) 我需要的是一个工具,它将使用一个模式文件和一个xml文件,然后以类似的方式返回Java 简单、结构化的XML数据绑定(无代码生成或反射),java,xml-serialization,xsd,Java,Xml Serialization,Xsd,我正在寻找一个Java库,它允许我将XML封送到Java对象树,反之亦然。有很多库允许我将XML绑定到一些代码生成工具生成的JavaBean,但是,我不需要这些库(JAXB、JiBX、Castor等等) 我需要的是一个工具,它将使用一个模式文件和一个xml文件,然后以类似的方式返回Maps、Lists和Objects的组合(当然,如果可能的话)。Jackson用于JSON,而不是XML;而且它缺乏考虑模式文件的能力(因为JSON模式目前还太不成熟) 我可以调整一些现有的工具来解决我的问题,还是应
Map
s、List
s和Object
s的组合(当然,如果可能的话)。Jackson用于JSON,而不是XML;而且它缺乏考虑模式文件的能力(因为JSON模式目前还太不成熟)
我可以调整一些现有的工具来解决我的问题,还是应该用DOM和XSOM推出我自己的解决方案?看起来像SOAP。
一个选项是ApacheAxis(我们经常使用它),但还有其他实现。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"));
有关更多信息,请参阅:
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");