При быстром взгляде я вижу две проблемы:
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
new String[]{"catalog.xml"});
Если вы посмотрите на Javadoc для этого метода , вы можете прочитать
catalogs - упорядоченный список массивов
абсолютные URI
это не то, что вы используете.
Вторая проблема здесь
Schema schema = factory.newSchema(new StreamSource(ClassLoader
.getSystemResourceAsStream("config.xsd")));
Вы не устанавливаете системный идентификатор для схемы, поэтому, если у вас есть относительное местоположение для импорта, оно будет разрешено относительно текущего каталога вашего приложения вместо каталога, в котором у вас есть файл схемы. Вам нужно либо вызвать setSystemId на источнике, либо передать системный идентификатор при его создании:
new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())