diff --git a/config/src/test/java/org/springframework/security/config/SecurityNamespaceHandlerTests.java b/config/src/test/java/org/springframework/security/config/SecurityNamespaceHandlerTests.java index 2f5079640e..31d31c7a93 100644 --- a/config/src/test/java/org/springframework/security/config/SecurityNamespaceHandlerTests.java +++ b/config/src/test/java/org/springframework/security/config/SecurityNamespaceHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; import org.springframework.security.config.util.InMemoryXmlApplicationContext; +import org.springframework.security.config.util.SpringSecurityVersions; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.ClassUtils; @@ -133,6 +134,13 @@ public class SecurityNamespaceHandlerTests { // should load just fine since no websocket block } + @Test + public void configureWhenOldVersionThenErrorMessageContainsCorrectVersion() { + assertThatExceptionOfType(BeanDefinitionParsingException.class) + .isThrownBy(() -> new InMemoryXmlApplicationContext(XML_AUTHENTICATION_MANAGER, "3.0", null)) + .withMessageContaining(SpringSecurityVersions.getCurrentXsdVersionFromSpringSchemas()); + } + private void expectClassUtilsForNameThrowsNoClassDefFoundError(String className) { this.classUtils.when(() -> ClassUtils.forName(eq(FILTER_CHAIN_PROXY_CLASSNAME), any())) .thenThrow(new NoClassDefFoundError(className)); diff --git a/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java b/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java index 306ae257be..f9660de009 100644 --- a/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java +++ b/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2009-2020 the original author or authors. + * Copyright 2009-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,10 @@ package org.springframework.security.config.util; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractXmlApplicationContext; import org.springframework.core.io.Resource; -import org.springframework.security.core.SpringSecurityCoreVersion; import org.springframework.security.util.InMemoryResource; /** @@ -34,24 +29,6 @@ import org.springframework.security.util.InMemoryResource; */ public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext { - private static String getCurrentXSDVersionFromSpringSchemas() { - Properties properties = new Properties(); - try (InputStream is = SpringSecurityCoreVersion.class.getClassLoader() - .getResourceAsStream("META-INF/spring.schemas")) { - properties.load(is); - } - catch (IOException ex) { - throw new RuntimeException("Could not read 'META-INF/spring.schemas'", ex); - } - - String inPackageLocation = properties - .getProperty("https://www.springframework.org/schema/security/spring-security.xsd"); - String[] parts = inPackageLocation.split("-"); - String currentXSD = parts[parts.length - 1]; - String currentVersion = currentXSD.replace(".xsd", ""); - return currentVersion; - } - static final String BEANS_OPENING = "