Skip to content

Commit

Permalink
Fix deriving DataSources from custom type
Browse files Browse the repository at this point in the history
Eliminate the unsupported datasource property exception thrown
when trying to derive a datasource from an unknown datasource type.

See gh-27453
  • Loading branch information
saraswathy-krish authored and wilkinsona committed Jul 22, 2021
1 parent 44a9531 commit d0e2823
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -281,17 +281,22 @@ public String toString() {
}

Method findSetter(Class<?> type) {
return extracted("set", type);
return extracted("set", type, true);
}

Method findGetter(Class<?> type) {
return extracted("get", type);
return extracted("get", type, false);
}

private Method extracted(String prefix, Class<?> type) {
private Method extracted(String prefix, Class<?> type, boolean hasParameter) {
for (String candidate : this.names) {
Method method = ReflectionUtils.findMethod(type, prefix + StringUtils.capitalize(candidate),
String.class);
Method method;
if (hasParameter) {
method = ReflectionUtils.findMethod(type, prefix + StringUtils.capitalize(candidate), String.class);
}
else {
method = ReflectionUtils.findMethod(type, prefix + StringUtils.capitalize(candidate));
}
if (method != null) {
return method;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,19 @@ void buildWhenDerivedFromExistingDatabaseWithTypeChange() {
assertThat(built.getUrl()).isEqualTo("jdbc:postgresql://localhost:5432/postgres");
}

@Test // gh -27295
void buildWhenDerivedFromCustomTypeSpecifiedReturnsDataSource() {
CustomDataSource dataSource = new CustomDataSource();
dataSource.setUsername("test");
dataSource.setPassword("secret");
dataSource.setUrl("jdbc:postgresql://localhost:5432/postgres");
DataSourceBuilder<?> builder = DataSourceBuilder.derivedFrom(dataSource).type(SimpleDriverDataSource.class);
SimpleDriverDataSource testSource = (SimpleDriverDataSource) builder.build();
assertThat(testSource.getUsername()).isEqualTo("test");
assertThat(testSource.getUrl()).isEqualTo("jdbc:postgresql://localhost:5432/postgres");
assertThat(testSource.getPassword()).isEqualTo("secret");
}

final class HidePackagesClassLoader extends URLClassLoader {

private final String[] hiddenPackages;
Expand Down

0 comments on commit d0e2823

Please sign in to comment.