$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);

Reply via email to