Почему моя схема выдает нулевой указатель и передает его во второй разJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему моя схема выдает нулевой указатель и передает его во второй раз

Сообщение Anonymous »

Приведенный ниже код присутствует и выдает нулевой указатель при возврате схемы.newValidator(), что происходит только в первый раз, а во второй раз все работает нормально. Кроме того, это очень случайно, раз в пару месяцев это происходит прямо при запуске модуля. Сервер представляет собой Spring-Web-приложение, управляемое Kube. bean-компоненты загружаются через sping-context.yml.

Код: Выделить всё

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();
}
};
[*]Схема не является потокобезопасной, поэтому возникает нулевой указатель. Но я не смог воспроизвести ее в JUNIT.
[*]Schemafactory не является потокобезопасным, но реализация PaymentCoreUtils.loadFileFromClasspath возвращает новый файл (PaymentCoreUtils.class.getClassLoader().getResource(file).getPath()); Что по своей сути является потокобезопасным. XSD упакован вместе с JAR, поэтому XSD всегда доступен в JAR.
Проверил и попытался выполнить многопоточный тест для каждого оператора в строке.


Подробнее здесь: https://stackoverflow.com/questions/788 ... second-yim
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»