Код: Выделить всё
protected static final ThreadLocal VALIDATOR = new ThreadLocal() {
Schema schema = null;
protected Validator initialValue() {
try {
if (schema == null){
File xsdFile = PaymentCoreUtils.loadFileFromClasspath(xsdFilePath);
// Create SchemaFactory using XSD file
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);
schema = factory.newSchema(xsdFile);
}
} catch (SAXException e) {}
return schema.newValidator();
}
};
[*]Schemafactory не является потокобезопасным, но реализация PaymentCoreUtils.loadFileFromClasspath возвращает новый файл (PaymentCoreUtils.class.getClassLoader().getResource(file).getPath()); Что по своей сути является потокобезопасным. XSD упакован вместе с JAR, поэтому XSD всегда доступен в JAR.
Проверил и попытался выполнить многопоточный тест для каждого оператора в строке.
Подробнее здесь: https://stackoverflow.com/questions/788 ... second-yim
Мобильная версия