diff --git a/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java b/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java index 035823e0..11e3fb25 100644 --- a/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java +++ b/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java @@ -61,9 +61,27 @@ public final class PropertyBeanSetter private static void setProperty(Object target, String propName, Object propValue) { String capitalized = "set" + propName.substring(0, 1).toUpperCase() + propName.substring(1); + PropertyDescriptor propertyDescriptor; + try + { + propertyDescriptor = new PropertyDescriptor(propName, target.getClass(), null, capitalized); + } + catch (IntrospectionException e) + { + capitalized = "set" + propName.toUpperCase(); + try + { + propertyDescriptor = new PropertyDescriptor(propName, target.getClass(), null, capitalized); + } + catch (IntrospectionException e1) + { + LOGGER.error("Property {} is does not exist on target class {}", propName, target.getClass()); + throw new RuntimeException(e); + } + } + try { - PropertyDescriptor propertyDescriptor = new PropertyDescriptor(propName, target.getClass(), null, capitalized); Method writeMethod = propertyDescriptor.getWriteMethod(); Class paramClass = writeMethod.getParameterTypes()[0]; if (paramClass == int.class) @@ -87,11 +105,6 @@ public final class PropertyBeanSetter writeMethod.invoke(target, propValue); } } - catch (IntrospectionException e) - { - LOGGER.error("Property {} is does not exist on target class {}", propName, target.getClass()); - throw new RuntimeException(e); - } catch (Exception e) { LOGGER.error("Exception setting property {} on target class {}", propName, target.getClass(), e); diff --git a/src/test/java/com/zaxxer/hikari/TestPropertySetter.java b/src/test/java/com/zaxxer/hikari/TestPropertySetter.java index 0df672d3..b5cdd9bf 100644 --- a/src/test/java/com/zaxxer/hikari/TestPropertySetter.java +++ b/src/test/java/com/zaxxer/hikari/TestPropertySetter.java @@ -50,4 +50,17 @@ public class TestPropertySetter Assert.assertSame(PrintWriter.class, dataSource.getLogWriter().getClass()); } + + @Test + public void testPropertyUpperCase() throws Exception + { + File file = new File("src/test/resources/propfile3.properties"); + HikariConfig config = new HikariConfig(file.getPath()); + config.validate(); + + Class clazz = this.getClass().getClassLoader().loadClass(config.getDataSourceClassName()); + DataSource dataSource = (DataSource) clazz.newInstance(); + PropertyBeanSetter.setTargetFromProperties(dataSource, config.getDataSourceProperties()); + } + } diff --git a/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java b/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java index 77a9560f..d7e7c936 100644 --- a/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java +++ b/src/test/java/com/zaxxer/hikari/mocks/StubDataSource.java @@ -55,6 +55,11 @@ public class StubDataSource implements DataSource this.password = password; } + public void setURL(String url) + { + // we don't care + } + /** {@inheritDoc} */ @Override public PrintWriter getLogWriter() throws SQLException diff --git a/src/test/resources/propfile3.properties b/src/test/resources/propfile3.properties new file mode 100644 index 00000000..10fdcf1f --- /dev/null +++ b/src/test/resources/propfile3.properties @@ -0,0 +1,6 @@ +connectionTestQuery=SELECT 1 +autoCommit=false +dataSourceClassName=com.zaxxer.hikari.mocks.StubDataSource +dataSource.user=test +dataSource.password=test +dataSource.url=jdbc:stub:foo