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")