private Object readEncoded()

in src/main/java/software/amazon/cloudformation/proxy/StdCallbackContext.java [191:224]


        private Object readEncoded(JsonParser p, DeserializationContext ctxt) throws IOException {
            if (!p.isExpectedStartArrayToken()) {
                throw new JsonParseException(p, "Expected array for encoded object got " + p.currentToken());
            }

            Object value = null;
            JsonToken next = p.nextToken();
            if (next != JsonToken.VALUE_STRING) {
                throw new JsonParseException(p, "Encoded Class value not present " + next);
            }
            String typeName = p.getText();
            p.nextToken(); // fwd to next
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            if (loader == null) {
                loader = getClass().getClassLoader();
            }
            try {
                Class<?> type = loader.loadClass(typeName);
                if (Collection.class.isAssignableFrom(type)) {
                    value = readCollection(type, p, ctxt);
                } else if (Map.class.isAssignableFrom(type)) {
                    value = readMap(type, p, ctxt);
                } else {
                    JsonDeserializer<Object> deser = ctxt.findRootValueDeserializer(ctxt.constructType(type));
                    value = deser.deserialize(p, ctxt);
                }
            } catch (ClassNotFoundException e) {
                throw new JsonParseException(p, "Type name encoded " + typeName + " could not be loaded", e);
            }
            if (p.nextToken() != JsonToken.END_ARRAY) {
                throw new JsonParseException(p, "Encoded expected end of ARRAY marker " + p.currentToken());
            }
            return value;
        }