Merge branch '3.3.x'
This commit is contained in:
commit
916efb632c
@ -32,7 +32,7 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
||||||
import org.hibernate.boot.model.naming.ImplicitNamingStrategy;
|
import org.hibernate.boot.model.naming.ImplicitNamingStrategy;
|
||||||
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.ManagedBeanSettings;
|
||||||
|
|
||||||
import org.springframework.aot.hint.MemberCategory;
|
import org.springframework.aot.hint.MemberCategory;
|
||||||
import org.springframework.aot.hint.RuntimeHints;
|
import org.springframework.aot.hint.RuntimeHints;
|
||||||
@ -121,7 +121,7 @@ class HibernateJpaConfiguration extends JpaBaseConfiguration {
|
|||||||
List<HibernatePropertiesCustomizer> customizers = new ArrayList<>();
|
List<HibernatePropertiesCustomizer> customizers = new ArrayList<>();
|
||||||
if (ClassUtils.isPresent("org.hibernate.resource.beans.container.spi.BeanContainer",
|
if (ClassUtils.isPresent("org.hibernate.resource.beans.container.spi.BeanContainer",
|
||||||
getClass().getClassLoader())) {
|
getClass().getClassLoader())) {
|
||||||
customizers.add((properties) -> properties.put(AvailableSettings.BEAN_CONTAINER,
|
customizers.add((properties) -> properties.put(ManagedBeanSettings.BEAN_CONTAINER,
|
||||||
new SpringBeanContainer(beanFactory)));
|
new SpringBeanContainer(beanFactory)));
|
||||||
}
|
}
|
||||||
if (physicalNamingStrategy != null || implicitNamingStrategy != null) {
|
if (physicalNamingStrategy != null || implicitNamingStrategy != null) {
|
||||||
|
@ -22,7 +22,9 @@ import java.util.Map;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.MappingSettings;
|
||||||
|
import org.hibernate.cfg.PersistenceSettings;
|
||||||
|
import org.hibernate.cfg.SchemaToolingSettings;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
|
import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
|
||||||
@ -86,10 +88,10 @@ public class HibernateProperties {
|
|||||||
getNaming().applyNamingStrategies(result);
|
getNaming().applyNamingStrategies(result);
|
||||||
String ddlAuto = determineDdlAuto(existing, settings::getDdlAuto);
|
String ddlAuto = determineDdlAuto(existing, settings::getDdlAuto);
|
||||||
if (StringUtils.hasText(ddlAuto) && !"none".equals(ddlAuto)) {
|
if (StringUtils.hasText(ddlAuto) && !"none".equals(ddlAuto)) {
|
||||||
result.put(AvailableSettings.HBM2DDL_AUTO, ddlAuto);
|
result.put(SchemaToolingSettings.HBM2DDL_AUTO, ddlAuto);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result.remove(AvailableSettings.HBM2DDL_AUTO);
|
result.remove(SchemaToolingSettings.HBM2DDL_AUTO);
|
||||||
}
|
}
|
||||||
Collection<HibernatePropertiesCustomizer> customizers = settings.getHibernatePropertiesCustomizers();
|
Collection<HibernatePropertiesCustomizer> customizers = settings.getHibernatePropertiesCustomizers();
|
||||||
if (!ObjectUtils.isEmpty(customizers)) {
|
if (!ObjectUtils.isEmpty(customizers)) {
|
||||||
@ -99,20 +101,20 @@ public class HibernateProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyScanner(Map<String, Object> result) {
|
private void applyScanner(Map<String, Object> result) {
|
||||||
if (!result.containsKey(AvailableSettings.SCANNER) && ClassUtils.isPresent(DISABLED_SCANNER_CLASS, null)) {
|
if (!result.containsKey(PersistenceSettings.SCANNER) && ClassUtils.isPresent(DISABLED_SCANNER_CLASS, null)) {
|
||||||
result.put(AvailableSettings.SCANNER, DISABLED_SCANNER_CLASS);
|
result.put(PersistenceSettings.SCANNER, DISABLED_SCANNER_CLASS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String determineDdlAuto(Map<String, String> existing, Supplier<String> defaultDdlAuto) {
|
private String determineDdlAuto(Map<String, String> existing, Supplier<String> defaultDdlAuto) {
|
||||||
String ddlAuto = existing.get(AvailableSettings.HBM2DDL_AUTO);
|
String ddlAuto = existing.get(SchemaToolingSettings.HBM2DDL_AUTO);
|
||||||
if (ddlAuto != null) {
|
if (ddlAuto != null) {
|
||||||
return ddlAuto;
|
return ddlAuto;
|
||||||
}
|
}
|
||||||
if (this.ddlAuto != null) {
|
if (this.ddlAuto != null) {
|
||||||
return this.ddlAuto;
|
return this.ddlAuto;
|
||||||
}
|
}
|
||||||
if (existing.get(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION) != null) {
|
if (existing.get(SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION) != null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return defaultDdlAuto.get();
|
return defaultDdlAuto.get();
|
||||||
@ -147,9 +149,9 @@ public class HibernateProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyNamingStrategies(Map<String, Object> properties) {
|
private void applyNamingStrategies(Map<String, Object> properties) {
|
||||||
applyNamingStrategy(properties, AvailableSettings.IMPLICIT_NAMING_STRATEGY, this.implicitStrategy,
|
applyNamingStrategy(properties, MappingSettings.IMPLICIT_NAMING_STRATEGY, this.implicitStrategy,
|
||||||
SpringImplicitNamingStrategy.class::getName);
|
SpringImplicitNamingStrategy.class::getName);
|
||||||
applyNamingStrategy(properties, AvailableSettings.PHYSICAL_NAMING_STRATEGY, this.physicalStrategy,
|
applyNamingStrategy(properties, MappingSettings.PHYSICAL_NAMING_STRATEGY, this.physicalStrategy,
|
||||||
CamelCaseToUnderscoresNamingStrategy.class::getName);
|
CamelCaseToUnderscoresNamingStrategy.class::getName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,13 +115,20 @@ class ReactiveOAuth2ResourceServerJwkConfiguration {
|
|||||||
List<OAuth2TokenValidator<Jwt>> validators = new ArrayList<>();
|
List<OAuth2TokenValidator<Jwt>> validators = new ArrayList<>();
|
||||||
validators.add(defaultValidator);
|
validators.add(defaultValidator);
|
||||||
if (!CollectionUtils.isEmpty(audiences)) {
|
if (!CollectionUtils.isEmpty(audiences)) {
|
||||||
validators.add(new JwtClaimValidator<List<String>>(JwtClaimNames.AUD,
|
validators.add(audValidator(audiences));
|
||||||
(aud) -> aud != null && !Collections.disjoint(aud, audiences)));
|
|
||||||
}
|
}
|
||||||
validators.addAll(this.additionalValidators);
|
validators.addAll(this.additionalValidators);
|
||||||
return new DelegatingOAuth2TokenValidator<>(validators);
|
return new DelegatingOAuth2TokenValidator<>(validators);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JwtClaimValidator<List<String>> audValidator(List<String> audiences) {
|
||||||
|
return new JwtClaimValidator<>(JwtClaimNames.AUD, (aud) -> nullSafeDisjoint(aud, audiences));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean nullSafeDisjoint(List<String> c1, List<String> c2) {
|
||||||
|
return c1 != null && !Collections.disjoint(c1, c2);
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@Conditional(KeyValueCondition.class)
|
@Conditional(KeyValueCondition.class)
|
||||||
NimbusReactiveJwtDecoder jwtDecoderByPublicKeyValue() throws Exception {
|
NimbusReactiveJwtDecoder jwtDecoderByPublicKeyValue() throws Exception {
|
||||||
|
@ -114,13 +114,20 @@ class OAuth2ResourceServerJwtConfiguration {
|
|||||||
List<OAuth2TokenValidator<Jwt>> validators = new ArrayList<>();
|
List<OAuth2TokenValidator<Jwt>> validators = new ArrayList<>();
|
||||||
validators.add(defaultValidator);
|
validators.add(defaultValidator);
|
||||||
if (!CollectionUtils.isEmpty(audiences)) {
|
if (!CollectionUtils.isEmpty(audiences)) {
|
||||||
validators.add(new JwtClaimValidator<List<String>>(JwtClaimNames.AUD,
|
validators.add(audValidator(audiences));
|
||||||
(aud) -> aud != null && !Collections.disjoint(aud, audiences)));
|
|
||||||
}
|
}
|
||||||
validators.addAll(this.additionalValidators);
|
validators.addAll(this.additionalValidators);
|
||||||
return new DelegatingOAuth2TokenValidator<>(validators);
|
return new DelegatingOAuth2TokenValidator<>(validators);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JwtClaimValidator<List<String>> audValidator(List<String> audiences) {
|
||||||
|
return new JwtClaimValidator<>(JwtClaimNames.AUD, (aud) -> nullSafeDisjoint(aud, audiences));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean nullSafeDisjoint(List<String> c1, List<String> c2) {
|
||||||
|
return c1 != null && !Collections.disjoint(c1, c2);
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@Conditional(KeyValueCondition.class)
|
@Conditional(KeyValueCondition.class)
|
||||||
JwtDecoder jwtDecoderByPublicKeyValue() throws Exception {
|
JwtDecoder jwtDecoderByPublicKeyValue() throws Exception {
|
||||||
|
@ -162,7 +162,7 @@ class GroovyTemplateAutoConfigurationTests {
|
|||||||
MarkupTemplateEngine engine = config.getTemplateEngine();
|
MarkupTemplateEngine engine = config.getTemplateEngine();
|
||||||
Writer writer = new StringWriter();
|
Writer writer = new StringWriter();
|
||||||
engine.createTemplate(new ClassPathResource("templates/message.tpl").getFile())
|
engine.createTemplate(new ClassPathResource("templates/message.tpl").getFile())
|
||||||
.make(new HashMap<String, Object>(Collections.singletonMap("greeting", "Hello World")))
|
.make(new HashMap<>(Collections.singletonMap("greeting", "Hello World")))
|
||||||
.writeTo(writer);
|
.writeTo(writer);
|
||||||
assertThat(writer.toString()).contains("Hello World");
|
assertThat(writer.toString()).contains("Hello World");
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,9 @@ import java.util.function.Consumer;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.MappingSettings;
|
||||||
|
import org.hibernate.cfg.PersistenceSettings;
|
||||||
|
import org.hibernate.cfg.SchemaToolingSettings;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
@ -59,9 +61,9 @@ class HibernatePropertiesTests {
|
|||||||
void noCustomNamingStrategy() {
|
void noCustomNamingStrategy() {
|
||||||
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> {
|
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> {
|
||||||
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
||||||
assertThat(hibernateProperties).containsEntry(AvailableSettings.PHYSICAL_NAMING_STRATEGY,
|
assertThat(hibernateProperties).containsEntry(MappingSettings.PHYSICAL_NAMING_STRATEGY,
|
||||||
CamelCaseToUnderscoresNamingStrategy.class.getName());
|
CamelCaseToUnderscoresNamingStrategy.class.getName());
|
||||||
assertThat(hibernateProperties).containsEntry(AvailableSettings.IMPLICIT_NAMING_STRATEGY,
|
assertThat(hibernateProperties).containsEntry(MappingSettings.IMPLICIT_NAMING_STRATEGY,
|
||||||
SpringImplicitNamingStrategy.class.getName());
|
SpringImplicitNamingStrategy.class.getName());
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -73,8 +75,8 @@ class HibernatePropertiesTests {
|
|||||||
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical")
|
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical")
|
||||||
.run(assertHibernateProperties((hibernateProperties) -> {
|
.run(assertHibernateProperties((hibernateProperties) -> {
|
||||||
assertThat(hibernateProperties).contains(
|
assertThat(hibernateProperties).contains(
|
||||||
entry(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "com.example.Implicit"),
|
entry(MappingSettings.IMPLICIT_NAMING_STRATEGY, "com.example.Implicit"),
|
||||||
entry(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "com.example.Physical"));
|
entry(MappingSettings.PHYSICAL_NAMING_STRATEGY, "com.example.Physical"));
|
||||||
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -87,8 +89,8 @@ class HibernatePropertiesTests {
|
|||||||
.run(assertHibernateProperties((hibernateProperties) -> {
|
.run(assertHibernateProperties((hibernateProperties) -> {
|
||||||
// You can override them as we don't provide any default
|
// You can override them as we don't provide any default
|
||||||
assertThat(hibernateProperties).contains(
|
assertThat(hibernateProperties).contains(
|
||||||
entry(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "com.example.Implicit"),
|
entry(MappingSettings.IMPLICIT_NAMING_STRATEGY, "com.example.Implicit"),
|
||||||
entry(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "com.example.Physical"));
|
entry(MappingSettings.PHYSICAL_NAMING_STRATEGY, "com.example.Physical"));
|
||||||
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
assertThat(hibernateProperties).doesNotContainKeys("hibernate.ejb.naming_strategy");
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -96,15 +98,15 @@ class HibernatePropertiesTests {
|
|||||||
@Test
|
@Test
|
||||||
void scannerUsesDisabledScannerByDefault() {
|
void scannerUsesDisabledScannerByDefault() {
|
||||||
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
this.contextRunner.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
||||||
.containsEntry(AvailableSettings.SCANNER, "org.hibernate.boot.archive.scan.internal.DisabledScanner")));
|
.containsEntry(PersistenceSettings.SCANNER, "org.hibernate.boot.archive.scan.internal.DisabledScanner")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void scannerCanBeCustomized() {
|
void scannerCanBeCustomized() {
|
||||||
this.contextRunner.withPropertyValues(
|
this.contextRunner.withPropertyValues(
|
||||||
"spring.jpa.properties.hibernate.archive.scanner:org.hibernate.boot.archive.scan.internal.StandardScanner")
|
"spring.jpa.properties.hibernate.archive.scanner:org.hibernate.boot.archive.scan.internal.StandardScanner")
|
||||||
.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties)
|
.run(assertHibernateProperties((hibernateProperties) -> assertThat(hibernateProperties).containsEntry(
|
||||||
.containsEntry(AvailableSettings.SCANNER, "org.hibernate.boot.archive.scan.internal.StandardScanner")));
|
PersistenceSettings.SCANNER, "org.hibernate.boot.archive.scan.internal.StandardScanner")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -125,8 +127,8 @@ class HibernatePropertiesTests {
|
|||||||
.withPropertyValues(
|
.withPropertyValues(
|
||||||
"spring.jpa.properties.jakarta.persistence.schema-generation.database.action=drop-and-create")
|
"spring.jpa.properties.jakarta.persistence.schema-generation.database.action=drop-and-create")
|
||||||
.run(assertHibernateProperties((hibernateProperties) -> {
|
.run(assertHibernateProperties((hibernateProperties) -> {
|
||||||
assertThat(hibernateProperties).doesNotContainKey(AvailableSettings.HBM2DDL_AUTO);
|
assertThat(hibernateProperties).doesNotContainKey(SchemaToolingSettings.HBM2DDL_AUTO);
|
||||||
assertThat(hibernateProperties).containsEntry(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
|
assertThat(hibernateProperties).containsEntry(SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION,
|
||||||
"drop-and-create");
|
"drop-and-create");
|
||||||
then(this.ddlAutoSupplier).should(never()).get();
|
then(this.ddlAutoSupplier).should(never()).get();
|
||||||
}));
|
}));
|
||||||
@ -134,7 +136,7 @@ class HibernatePropertiesTests {
|
|||||||
|
|
||||||
private ContextConsumer<AssertableApplicationContext> assertDefaultDdlAutoNotInvoked(String expectedDdlAuto) {
|
private ContextConsumer<AssertableApplicationContext> assertDefaultDdlAutoNotInvoked(String expectedDdlAuto) {
|
||||||
return assertHibernateProperties((hibernateProperties) -> {
|
return assertHibernateProperties((hibernateProperties) -> {
|
||||||
assertThat(hibernateProperties).containsEntry(AvailableSettings.HBM2DDL_AUTO, expectedDdlAuto);
|
assertThat(hibernateProperties).containsEntry(SchemaToolingSettings.HBM2DDL_AUTO, expectedDdlAuto);
|
||||||
then(this.ddlAutoSupplier).should(never()).get();
|
then(this.ddlAutoSupplier).should(never()).get();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@ import org.assertj.core.api.InstanceOfAssertFactory;
|
|||||||
import org.assertj.core.api.MapAssert;
|
import org.assertj.core.api.MapAssert;
|
||||||
import org.junit.jupiter.api.Nested;
|
import org.junit.jupiter.api.Nested;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentMatchers;
|
||||||
import org.mockito.InOrder;
|
import org.mockito.InOrder;
|
||||||
import org.mockito.Mockito;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||||
import org.springframework.boot.test.context.TestConfiguration;
|
import org.springframework.boot.test.context.TestConfiguration;
|
||||||
@ -153,7 +153,7 @@ class PulsarConfigurationTests {
|
|||||||
.getField(clientFactory, "customizer");
|
.getField(clientFactory, "customizer");
|
||||||
customizeAction.accept(pulsarClientBuilderCustomizer, target);
|
customizeAction.accept(pulsarClientBuilderCustomizer, target);
|
||||||
InOrder ordered = inOrder(target);
|
InOrder ordered = inOrder(target);
|
||||||
ordered.verify(target).serviceUrlProvider(Mockito.any(AutoClusterFailover.class));
|
ordered.verify(target).serviceUrlProvider(ArgumentMatchers.any(AutoClusterFailover.class));
|
||||||
assertThat(pulsarProperties.getClient().getFailover().getDelay()).isEqualTo(Duration.ofSeconds(15));
|
assertThat(pulsarProperties.getClient().getFailover().getDelay()).isEqualTo(Duration.ofSeconds(15));
|
||||||
assertThat(pulsarProperties.getClient().getFailover().getSwitchBackDelay())
|
assertThat(pulsarProperties.getClient().getFailover().getSwitchBackDelay())
|
||||||
.isEqualTo(Duration.ofSeconds(30));
|
.isEqualTo(Duration.ofSeconds(30));
|
||||||
|
@ -56,7 +56,7 @@ class ValidatorAdapterTests {
|
|||||||
this.contextRunner.withUserConfiguration(LocalValidatorFactoryBeanConfig.class).run((context) -> {
|
this.contextRunner.withUserConfiguration(LocalValidatorFactoryBeanConfig.class).run((context) -> {
|
||||||
ValidatorAdapter wrapper = context.getBean(ValidatorAdapter.class);
|
ValidatorAdapter wrapper = context.getBean(ValidatorAdapter.class);
|
||||||
assertThat(wrapper.supports(SampleData.class)).isTrue();
|
assertThat(wrapper.supports(SampleData.class)).isTrue();
|
||||||
MapBindingResult errors = new MapBindingResult(new HashMap<String, Object>(), "test");
|
MapBindingResult errors = new MapBindingResult(new HashMap<>(), "test");
|
||||||
wrapper.validate(new SampleData(40), errors);
|
wrapper.validate(new SampleData(40), errors);
|
||||||
assertThat(errors.getErrorCount()).isOne();
|
assertThat(errors.getErrorCount()).isOne();
|
||||||
});
|
});
|
||||||
|
@ -270,13 +270,13 @@ class TestRestTemplateTests {
|
|||||||
@Test
|
@Test
|
||||||
void exchangeWithRequestEntityAndClassHandlesRelativeUris() throws IOException {
|
void exchangeWithRequestEntityAndClassHandlesRelativeUris() throws IOException {
|
||||||
verifyRelativeUriHandling((testRestTemplate, relativeUri) -> testRestTemplate
|
verifyRelativeUriHandling((testRestTemplate, relativeUri) -> testRestTemplate
|
||||||
.exchange(new RequestEntity<String>(HttpMethod.GET, relativeUri), String.class));
|
.exchange(new RequestEntity<>(HttpMethod.GET, relativeUri), String.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void exchangeWithRequestEntityAndParameterizedTypeReferenceHandlesRelativeUris() throws IOException {
|
void exchangeWithRequestEntityAndParameterizedTypeReferenceHandlesRelativeUris() throws IOException {
|
||||||
verifyRelativeUriHandling((testRestTemplate, relativeUri) -> testRestTemplate
|
verifyRelativeUriHandling((testRestTemplate, relativeUri) -> testRestTemplate
|
||||||
.exchange(new RequestEntity<String>(HttpMethod.GET, relativeUri), new ParameterizedTypeReference<String>() {
|
.exchange(new RequestEntity<>(HttpMethod.GET, relativeUri), new ParameterizedTypeReference<String>() {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@ final class StringSequence implements CharSequence {
|
|||||||
* Returns {@code true} if the sequence is empty. Public to be compatible with JDK 15.
|
* Returns {@code true} if the sequence is empty. Public to be compatible with JDK 15.
|
||||||
* @return {@code true} if {@link #length()} is {@code 0}, otherwise {@code false}
|
* @return {@code true} if {@link #length()} is {@code 0}, otherwise {@code false}
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return length() == 0;
|
return length() == 0;
|
||||||
}
|
}
|
||||||
|
@ -369,7 +369,7 @@ public class UndertowServletWebServerFactory extends AbstractServletWebServerFac
|
|||||||
ServletContextInitializer[] mergedInitializers = mergeInitializers(initializers);
|
ServletContextInitializer[] mergedInitializers = mergeInitializers(initializers);
|
||||||
Initializer initializer = new Initializer(mergedInitializers);
|
Initializer initializer = new Initializer(mergedInitializers);
|
||||||
deployment.addServletContainerInitializer(new ServletContainerInitializerInfo(Initializer.class,
|
deployment.addServletContainerInitializer(new ServletContainerInitializerInfo(Initializer.class,
|
||||||
new ImmediateInstanceFactory<ServletContainerInitializer>(initializer), NO_CLASSES));
|
new ImmediateInstanceFactory<>(initializer), NO_CLASSES));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClassLoader getServletClassLoader() {
|
private ClassLoader getServletClassLoader() {
|
||||||
|
@ -139,8 +139,7 @@ abstract class AbstractFilterRegistrationBeanTests {
|
|||||||
void setServletRegistrationBeanReplacesValue() throws Exception {
|
void setServletRegistrationBeanReplacesValue() throws Exception {
|
||||||
given(this.servletContext.addFilter(anyString(), any(Filter.class))).willReturn(this.registration);
|
given(this.servletContext.addFilter(anyString(), any(Filter.class))).willReturn(this.registration);
|
||||||
AbstractFilterRegistrationBean<?> bean = createFilterRegistrationBean(mockServletRegistration("a"));
|
AbstractFilterRegistrationBean<?> bean = createFilterRegistrationBean(mockServletRegistration("a"));
|
||||||
bean.setServletRegistrationBeans(
|
bean.setServletRegistrationBeans(new LinkedHashSet<>(Collections.singletonList(mockServletRegistration("b"))));
|
||||||
new LinkedHashSet<ServletRegistrationBean<?>>(Collections.singletonList(mockServletRegistration("b"))));
|
|
||||||
bean.onStartup(this.servletContext);
|
bean.onStartup(this.servletContext);
|
||||||
then(this.registration).should().addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), false, "b");
|
then(this.registration).should().addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), false, "b");
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ class SampleActuatorUiApplicationTests {
|
|||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Arrays.asList(MediaType.TEXT_HTML));
|
headers.setAccept(Arrays.asList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.withBasicAuth("user", getPassword())
|
ResponseEntity<String> entity = this.restTemplate.withBasicAuth("user", getPassword())
|
||||||
.exchange("/", HttpMethod.GET, new HttpEntity<Void>(headers), String.class);
|
.exchange("/", HttpMethod.GET, new HttpEntity<>(headers), String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||||
assertThat(entity.getBody()).contains("<title>Hello");
|
assertThat(entity.getBody()).contains("<title>Hello");
|
||||||
}
|
}
|
||||||
@ -74,7 +74,7 @@ class SampleActuatorUiApplicationTests {
|
|||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Arrays.asList(MediaType.TEXT_HTML));
|
headers.setAccept(Arrays.asList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.withBasicAuth("user", getPassword())
|
ResponseEntity<String> entity = this.restTemplate.withBasicAuth("user", getPassword())
|
||||||
.exchange("/error", HttpMethod.GET, new HttpEntity<Void>(headers), String.class);
|
.exchange("/error", HttpMethod.GET, new HttpEntity<>(headers), String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
assertThat(entity.getBody()).contains("<html>")
|
assertThat(entity.getBody()).contains("<html>")
|
||||||
.contains("<body>")
|
.contains("<body>")
|
||||||
|
@ -48,7 +48,7 @@ class SampleServletApplicationTests {
|
|||||||
void testHomeIsSecure() {
|
void testHomeIsSecure() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
|
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<Void>(headers),
|
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ class SampleWebSecureCustomApplicationTests {
|
|||||||
void testHome() {
|
void testHome() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<Void>(headers),
|
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
||||||
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
||||||
@ -65,8 +65,8 @@ class SampleWebSecureCustomApplicationTests {
|
|||||||
void testLoginPage() {
|
void testLoginPage() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET,
|
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
new HttpEntity<Void>(headers), String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||||
assertThat(entity.getBody()).contains("<title>Login</title>");
|
assertThat(entity.getBody()).contains("<title>Login</title>");
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ class SampleWebSecureJdbcApplicationTests {
|
|||||||
void testHome() {
|
void testHome() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<Void>(headers),
|
ResponseEntity<String> entity = this.restTemplate.exchange("/", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
||||||
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
||||||
@ -65,8 +65,8 @@ class SampleWebSecureJdbcApplicationTests {
|
|||||||
void testLoginPage() {
|
void testLoginPage() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET,
|
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
new HttpEntity<Void>(headers), String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||||
assertThat(entity.getBody()).contains("<title>Login</title>");
|
assertThat(entity.getBody()).contains("<title>Login</title>");
|
||||||
}
|
}
|
||||||
|
@ -62,8 +62,8 @@ class SampleWebSecureApplicationTests {
|
|||||||
void testHome() {
|
void testHome() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/home", HttpMethod.GET,
|
ResponseEntity<String> entity = this.restTemplate.exchange("/home", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
new HttpEntity<Void>(headers), String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND);
|
||||||
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
assertThat(entity.getHeaders().getLocation().toString()).endsWith(this.port + "/login");
|
||||||
}
|
}
|
||||||
@ -72,8 +72,8 @@ class SampleWebSecureApplicationTests {
|
|||||||
void testLoginPage() {
|
void testLoginPage() {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML));
|
||||||
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET,
|
ResponseEntity<String> entity = this.restTemplate.exchange("/login", HttpMethod.GET, new HttpEntity<>(headers),
|
||||||
new HttpEntity<Void>(headers), String.class);
|
String.class);
|
||||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||||
assertThat(entity.getBody()).contains("<title>Login</title>");
|
assertThat(entity.getBody()).contains("<title>Login</title>");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user