diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java index 6951b078d86..4ed2387649b 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReader.java @@ -173,9 +173,9 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader { */ public void setValidationModeName(String validationModeName) { Assert.hasText(validationModeName, "'validationModeName' must not be null or blank"); - Integer mode = constants.get(validationModeName); - Assert.notNull(mode, "Only validation mode constants allowed"); - setValidationMode(mode); + Integer validationMode = constants.get(validationModeName); + Assert.notNull(validationMode, "Only validation mode constants allowed"); + this.validationMode = validationMode; } /** @@ -185,6 +185,8 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader { * activate schema namespace support explicitly: see {@link #setNamespaceAware}. */ public void setValidationMode(int validationMode) { + Assert.isTrue(constants.containsValue(validationMode), + "Only values of validation mode constants allowed"); this.validationMode = validationMode; } diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReaderTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReaderTests.java index 6807e24d9df..5df2606b926 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReaderTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/xml/XmlBeanDefinitionReaderTests.java @@ -155,6 +155,17 @@ class XmlBeanDefinitionReaderTests { .forEach(name -> assertThatNoException().as(name).isThrownBy(() -> reader.setValidationModeName(name))); } + @Test + void setValidationMode() { + assertThatIllegalArgumentException().isThrownBy(() -> reader.setValidationMode(999)); + + assertThatNoException().isThrownBy(() -> reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE)); + assertThatNoException().isThrownBy(() -> reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO)); + assertThatNoException().isThrownBy(() -> reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_DTD)); + assertThatNoException().isThrownBy(() -> reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD)); + } + + private static Stream streamValidationModeConstants() { return Arrays.stream(XmlBeanDefinitionReader.class.getFields()) .filter(ReflectionUtils::isPublicStaticFinal)