public static List<String> scanXmlThemes(ZipInputStream zipInputStream) throws IOException {
        if (zipInputStream == null) {
            return Collections.emptyList();
        }

        List<String> xmlThemes = new ArrayList<>();

        try {
            ZipEntry zipEntry;
            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                if (zipEntry.isDirectory()) {
                    continue;
                }
                String fileName = zipEntryName(zipEntry.getName());
                if (isXmlTheme(fileName)) {
                    xmlThemes.add(fileName);
                }
            }
        } finally {
            IOUtils.closeQuietly(zipInputStream);
        }

        return xmlThemes;
    }
@Test
    public void scanZipForXmlThemes() throws IOException {
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(ZipXmlThemeResourceProviderTest.class.getResourceAsStream("/xmlthemetest.zip")));
        Assert.assertNotNull(zis);

        List<String> xmlThemes = ZipXmlThemeResourceProvider.scanXmlThemes(zis);

        Assert.assertEquals(4, xmlThemes.size());
        Assert.assertTrue(xmlThemes.contains("one.xml"));
        Assert.assertTrue(xmlThemes.contains("two.xml"));
        Assert.assertTrue(xmlThemes.contains("res/three.xml"));
        Assert.assertTrue(xmlThemes.contains("res/sub/four.xml"));
    }