Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master e2392c3a0 -> a2fde1af6


Fix catalog XML deserializing

Fixes the serialized XML format so it can be deserialized later.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f9591d9f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f9591d9f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f9591d9f

Branch: refs/heads/master
Commit: f9591d9f2da776deb51536dba2e064989dbeda87
Parents: 58337c4
Author: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com>
Authored: Thu Jan 14 17:01:38 2016 +0200
Committer: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com>
Committed: Thu Jan 14 17:01:48 2016 +0200

----------------------------------------------------------------------
 .../catalog/internal/CatalogXmlSerializer.java     |  3 ++-
 .../apache/brooklyn/core/mgmt/BrooklynTags.java    | 17 ++++++++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f9591d9f/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java
----------------------------------------------------------------------
diff --git 
a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java
 
b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java
index 855a753..3cf686e 100644
--- 
a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java
+++ 
b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java
@@ -36,7 +36,8 @@ public class CatalogXmlSerializer extends 
XmlSerializer<Object> {
         
super(DeserializingClassRenamesProvider.loadDeserializingClassRenames());
         
         xstream.addDefaultImplementation(ArrayList.class, Collection.class);
-        
+       
+        //Doesn't work well for non-standard lists, like Lists.transform 
results
         xstream.aliasType("list", List.class);
         xstream.aliasType("map", Map.class);
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f9591d9f/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
----------------------------------------------------------------------
diff --git 
a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
 
b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
index e8d7915..a08eb56 100644
--- 
a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
+++ 
b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
@@ -19,6 +19,7 @@
 package org.apache.brooklyn.core.mgmt;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -85,11 +86,17 @@ public class BrooklynTags {
 
     public static class TraitsTag extends ListTag<String> {
         public TraitsTag(List<Class<?>> interfaces) {
-            super(Lists.transform(interfaces, new Function<Class<?>, String>() 
{
-                @Override public String apply(Class<?> input) {
-                    return input.getName();
-                }
-            }));
+            // The transformed list is a view, meaning that it references
+            // the instances list. This means that it will serialize 
+            // the list of classes along with the anonymous function which
+            // is not what we want. Force eager evaluation instead, using
+            // a simple list, supported by {@link CatalogXmlSerializer}.
+            super(new ArrayList<String>(
+                Lists.transform(interfaces, new Function<Class<?>, String>() {
+                    @Override public String apply(Class<?> input) {
+                        return input.getName();
+                    }
+                })));
         }
 
         @JsonProperty("traits")

Reply via email to