Я написал программу для проверки всех xmls, присутствующих в папке, и сообщите об ошибках. Я использовал утилиту Java Validator в моей программе.Проверка XML. Слишком много открытых файлов
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("xsdPath"));
У меня есть список XML-файлов, которые я тестирующих в цикле
for (int i = 0; i < list.size(); i++) {
String returnValue = validateXML(list.get(i));
...
}
Тогда я функция, которая Подтверждает
public static String validateXML(String xmlPath){
try {
validator = schema.newValidator();
validator.validate(new StreamSource(new File(xmlPath)));
} catch (IOException e) {
...
}
Вышеупомянутые функции XML, возвращает слишком много открывать ошибки файлов, если он превышает системный предел максимального количества установленных файлов.
Если я изменяю параметр linux с помощью ulimit -n 3000, тогда он работает нормально. Я хочу знать, можем ли мы использовать другой способ проверки XML в самом Java-коде, так что мне не нужно менять системный параметр.
Как насчет того, чтобы не открывать 3000 файлов одновременно? – Nadir
Вам нужно закрыть StreamSource, когда закончите с ним. – Rob
Я бы сказал, если вам нужно закрыть InputStream самостоятельно, то это ошибка. Саксон применяет правило, согласно которому тот, кто создает InputStream, отвечает за его закрытие. Когда вы используете 'new StreamSource (File)', система создает поток, поэтому система должна закрыть его. Однако документация JAXP не является явной. –