Support VcapApplicationListener Number Credentials

Update VcapApplicationListener to support Number based credentials.
Previously, any service credential value that wasn't a String would
be discarded. This was particularly a problem for services that exposed
a port as a JSON Number.  This change takes numbers in the credential
payload into account, converting them to Strings so that they will pass
through the properties system properly. There's no real downside to this
as Spring will coerce them back into Numbers if needed by an application.

Fixes gh-2707
This commit is contained in:
Ben Hale
2015-03-24 15:55:25 +00:00
committed by Phillip Webb
parent 1fba81e4ba
commit 147755f396
2 changed files with 13 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2010-2014 the original author or authors.
* Copyright 2010-2015 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.
@@ -213,6 +213,9 @@ public class VcapApplicationListener implements
if (value instanceof String) {
properties.put(key, value);
}
else if (value instanceof Number) {
properties.put(key, value.toString());
}
else if (value instanceof Map) {
// Need a compound key
@SuppressWarnings("unchecked")

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 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.
@@ -75,6 +75,10 @@ public class VcapApplicationListenerTests {
this.initializer.onApplicationEvent(this.event);
assertEquals("mysql",
this.context.getEnvironment().getProperty("vcap.services.mysql.name"));
assertEquals(
"3306",
this.context.getEnvironment().getProperty(
"vcap.services.mysql.credentials.port"));
}
@Test
@@ -86,5 +90,9 @@ public class VcapApplicationListenerTests {
this.initializer.onApplicationEvent(this.event);
assertEquals("mysql",
this.context.getEnvironment().getProperty("vcap.services.mysql.name"));
assertEquals(
"3306",
this.context.getEnvironment().getProperty(
"vcap.services.mysql.credentials.port"));
}
}