Skip to content

Commit 3ed0e02

Browse files
committed
Polish "Auto-configure ObjectDirectoryMapper"
See gh-44290
1 parent 8435aeb commit 3ed0e02

File tree

2 files changed

+39
-45
lines changed

2 files changed

+39
-45
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.springframework.boot.context.properties.PropertyMapper;
2929
import org.springframework.boot.convert.ApplicationConversionService;
3030
import org.springframework.context.annotation.Bean;
31-
import org.springframework.core.convert.ConversionService;
3231
import org.springframework.core.env.Environment;
3332
import org.springframework.ldap.convert.ConverterUtils;
3433
import org.springframework.ldap.core.ContextSource;
@@ -75,6 +74,16 @@ public LdapContextSource ldapContextSource(LdapConnectionDetails connectionDetai
7574
return source;
7675
}
7776

77+
@Bean
78+
@ConditionalOnMissingBean
79+
public ObjectDirectoryMapper objectDirectoryMapper() {
80+
ApplicationConversionService conversionService = new ApplicationConversionService();
81+
ConverterUtils.addDefaultConverters(conversionService);
82+
DefaultObjectDirectoryMapper objectDirectoryMapper = new DefaultObjectDirectoryMapper();
83+
objectDirectoryMapper.setConversionService(conversionService);
84+
return objectDirectoryMapper;
85+
}
86+
7887
@Bean
7988
@ConditionalOnMissingBean(LdapOperations.class)
8089
public LdapTemplate ldapTemplate(LdapProperties properties, ContextSource contextSource,
@@ -91,18 +100,4 @@ public LdapTemplate ldapTemplate(LdapProperties properties, ContextSource contex
91100
return ldapTemplate;
92101
}
93102

94-
@Bean
95-
@ConditionalOnMissingBean
96-
public ObjectDirectoryMapper objectDirectoryMapper() {
97-
DefaultObjectDirectoryMapper objectDirectoryMapper = new DefaultObjectDirectoryMapper();
98-
objectDirectoryMapper.setConversionService(createConversionService());
99-
return objectDirectoryMapper;
100-
}
101-
102-
private static ConversionService createConversionService() {
103-
ApplicationConversionService conversionService = new ApplicationConversionService();
104-
ConverterUtils.addDefaultConverters(conversionService);
105-
return conversionService;
106-
}
107-
108103
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,21 @@ void usesCustomConnectionDetailsWhenDefined() {
137137
});
138138
}
139139

140+
@Test
141+
void objectDirectoryMapperExists() {
142+
this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> {
143+
assertThat(context).hasSingleBean(ObjectDirectoryMapper.class);
144+
ObjectDirectoryMapper objectDirectoryMapper = context.getBean(ObjectDirectoryMapper.class);
145+
ApplicationConversionService conversionService = assertThat(objectDirectoryMapper)
146+
.extracting("converterManager")
147+
.extracting("conversionService")
148+
.asInstanceOf(InstanceOfAssertFactories.type(ApplicationConversionService.class))
149+
.actual();
150+
assertThat(conversionService.canConvert(String.class, Name.class)).isTrue();
151+
assertThat(conversionService.canConvert(Name.class, String.class)).isTrue();
152+
});
153+
}
154+
140155
@Test
141156
void templateExists() {
142157
this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> {
@@ -145,9 +160,23 @@ void templateExists() {
145160
assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignorePartialResultException", false);
146161
assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignoreNameNotFoundException", false);
147162
assertThat(ldapTemplate).hasFieldOrPropertyWithValue("ignoreSizeLimitExceededException", true);
163+
assertThat(ldapTemplate).extracting("objectDirectoryMapper")
164+
.isSameAs(context.getBean(ObjectDirectoryMapper.class));
148165
});
149166
}
150167

168+
@Test
169+
void templateCanBeConfiguredWithCustomObjectDirectoryMapper() {
170+
ObjectDirectoryMapper objectDirectoryMapper = mock(ObjectDirectoryMapper.class);
171+
this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389")
172+
.withBean(ObjectDirectoryMapper.class, () -> objectDirectoryMapper)
173+
.run((context) -> {
174+
assertThat(context).hasSingleBean(LdapTemplate.class);
175+
LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class);
176+
assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper);
177+
});
178+
}
179+
151180
@Test
152181
void templateConfigurationCanBeCustomized() {
153182
this.contextRunner
@@ -199,36 +228,6 @@ void contextSourceWithCustomNonUniqueDirContextAuthenticationStrategy() {
199228
});
200229
}
201230

202-
@Test
203-
void objectDirectoryMapperBeanAutoConfigured() {
204-
this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389").run((context) -> {
205-
assertThat(context).hasSingleBean(ObjectDirectoryMapper.class);
206-
assertThat(context).hasSingleBean(LdapTemplate.class);
207-
ObjectDirectoryMapper objectDirectoryMapper = context.getBean(ObjectDirectoryMapper.class);
208-
LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class);
209-
ApplicationConversionService conversionService = assertThat(objectDirectoryMapper)
210-
.extracting("converterManager")
211-
.extracting("conversionService")
212-
.asInstanceOf(InstanceOfAssertFactories.type(ApplicationConversionService.class))
213-
.actual();
214-
assertThat(conversionService.canConvert(String.class, Name.class)).isTrue();
215-
assertThat(conversionService.canConvert(Name.class, String.class)).isTrue();
216-
assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper);
217-
});
218-
}
219-
220-
@Test
221-
void customObjectDirectoryMapperBeanCanBeUsed() {
222-
ObjectDirectoryMapper objectDirectoryMapper = mock(ObjectDirectoryMapper.class);
223-
this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389")
224-
.withBean(ObjectDirectoryMapper.class, () -> objectDirectoryMapper)
225-
.run((context) -> {
226-
assertThat(context).hasSingleBean(LdapTemplate.class);
227-
LdapTemplate ldapTemplate = context.getBean(LdapTemplate.class);
228-
assertThat(ldapTemplate).extracting("objectDirectoryMapper").isSameAs(objectDirectoryMapper);
229-
});
230-
}
231-
232231
@Configuration(proxyBeanMethods = false)
233232
static class ConnectionDetailsConfiguration {
234233

0 commit comments

Comments
 (0)