You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/12/02 20:33:01 UTC

[brooklyn-server] branch master updated: forgive entity/adjunct references in JSON deserialization (sensor conversion)

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 712d17fd37 forgive entity/adjunct references in JSON deserialization (sensor conversion)
712d17fd37 is described below

commit 712d17fd373643448c601d259758a6e16a0c82a2
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Fri Dec 2 20:32:37 2022 +0000

    forgive entity/adjunct references in JSON deserialization (sensor conversion)
---
 .../core/resolve/jackson/CommonTypesSerialization.java   | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/CommonTypesSerialization.java b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/CommonTypesSerialization.java
index feeb811be4..c5d091b007 100644
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/CommonTypesSerialization.java
+++ b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/CommonTypesSerialization.java
@@ -233,6 +233,10 @@ public class CommonTypesSerialization {
             public T convertSpecialMapToObject(Map value, JsonParser p, DeserializationContext ctxt) throws IOException {
                 return ObjectAsStringSerializerAndDeserializer.this.convertSpecialMapToObject(value, p, ctxt);
             }
+
+            public T convertStringToObject(String value, JsonParser p, DeserializationContext ctxt) throws IOException {
+                return ObjectAsStringSerializerAndDeserializer.this.convertStringToObject(value, p, ctxt);
+            }
         }
     }
 
@@ -379,7 +383,7 @@ public class CommonTypesSerialization {
             @Override
             protected BrooklynObject newEmptyInstance() {
                 /* context buries the contextual types when called via createContextual, because we are a delegate; and has cleared it by the time it gets here */
-                if (knownConcreteType !=null) {
+                if (knownConcreteType != null) {
                     return BrooklynObjectSerialization.this.newEmptyInstance((Class<BrooklynObject>) knownConcreteType.getRawClass());
                 }
                 return super.newEmptyInstance();
@@ -428,6 +432,16 @@ public class CommonTypesSerialization {
 
                 throw new IllegalStateException("Entity instances and other Brooklyn objects should be supplied as unique IDs; they cannot be instantiated from YAML. If a spec is desired, the type should be known or use $brooklyn:entitySpec.");
             }
+
+            @Override public BrooklynObject convertStringToObject(String value, JsonParser p, DeserializationContext ctxt) throws IOException {
+                try {
+                    return super.convertStringToObject(value, p, ctxt);
+                } catch (Exception e) {
+                    Exceptions.propagateIfFatal(e);
+                    LOG.warn("Reference to BrooklynObject "+value+" which is no longer available; replacing with 'null'");
+                    return null;
+                }
+            }
         }
     }