确定基于XML文件的类型以指定相应的处理程序

时间:2018-04-09 11:01:54

标签: java xml jaxb deserialization

我有一个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)

}

1 个答案:

答案 0 :(得分:1)

  

但要这样做,您需要指定XML文件的相应类

不正确。您可以使用上下文路径创建JAXB上下文,例如:

JAXBContext.newInstance("com.acme.foo:com.acme:bar");

上下文路径是由:分隔的一个或多个包名称。

使用此方法您无需指定确切的类,您可以一次指定所有可能的包。