我有一个ScheduledJob,每隔xx秒检查一个已配置的文件夹,以获取新的XML文件。由于每个XML文件的内容不同,我需要确定应该使用哪个处理程序反序列化特定的XML文件并进行进一步处理。
据我所知,使用JAXB解组/反序列化XML是一场轻松的战争,但要这样做,您需要指定XML文件的相应类。在这种情况下,我需要根据XML文件所属的Class / POJO选择正确的处理程序。
例如,如下所示: 相应的Handler处理XML文件的特定类型/类。
List<File> xmlFiles = Arrays.asList(xmlFilesDirectory.listFiles(((dir, name) -> {return name.toLowerCase().endsWith(".xml");})));
for(File xmlFile : xmlFiles)
{
// Load XML
// decide which class / object to unmarshal to.
switch (xmlClassType) {
case TypeA:
abstractXmlHandler = typeAXmlHandler;
break;
case TypeB:
abstractXmlHandler = typeBXmlHandler;
break;
case TypeC:
abstractXmlHandler = typeCXmlHandler;
break;
default:
throw new UnsupportedOperationException("Unknown type");
}
abstractXmlHandler.handle(xmlFile)
}
答案 0 :(得分:1)
但要这样做,您需要指定XML文件的相应类
不正确。您可以使用上下文路径创建JAXB上下文,例如:
JAXBContext.newInstance("com.acme.foo:com.acme:bar");
上下文路径是由:
分隔的一个或多个包名称。
使用此方法您无需指定确切的类,您可以一次指定所有可能的包。