$brooklyn:object - try to instantiate using TypeCoercions Fall back to reflection.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8793e9db Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8793e9db Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8793e9db Branch: refs/heads/master Commit: 8793e9db533b290fb9d73705b05fb6409926b21b Parents: b726bd9 Author: Svetoslav Neykov <[email protected]> Authored: Tue Jan 27 16:59:01 2015 +0200 Committer: Svetoslav Neykov <[email protected]> Committed: Tue Jan 27 16:59:01 2015 +0200 ---------------------------------------------------------------------- .../camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8793e9db/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java index b93463a..b38afd8 100644 --- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java +++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/dsl/methods/BrooklynDslCommon.java @@ -41,7 +41,9 @@ import brooklyn.management.TaskFactory; import brooklyn.util.collections.MutableMap; import brooklyn.util.config.ConfigBag; import brooklyn.util.exceptions.Exceptions; +import brooklyn.util.flags.ClassCoercionException; import brooklyn.util.flags.FlagUtils; +import brooklyn.util.flags.TypeCoercions; import brooklyn.util.javalang.Reflections; import brooklyn.util.task.DeferredSupplier; @@ -264,8 +266,13 @@ public class BrooklynDslCommon { public static <T> T create(Class<T> type, Map<String,?> fields, Map<String,?> config) { try { - T bean = Reflections.invokeConstructorWithArgs(type).get(); - BeanUtils.populate(bean, fields); + T bean; + try { + bean = (T) TypeCoercions.coerce(fields, type); + } catch (ClassCoercionException ex) { + bean = Reflections.invokeConstructorWithArgs(type).get(); + BeanUtils.populate(bean, fields); + } if (bean instanceof Configurable && config.size() > 0) { ConfigBag brooklyn = ConfigBag.newInstance(config); FlagUtils.setFieldsFromFlags(bean, brooklyn);
