public static <T> T deserialize(Class<? extends T> clazz, JsonNode root) throws ReflectiveOperationException {
        T obj = clazz
                .getDeclaredConstructor()
                .newInstance();
        Map<String, List<Method>> setters = getSetters(obj);
        if (!root.isObject()) {
            throw new IllegalArgumentException("must be object");
        }
        Iterator<Map.Entry<String, JsonNode>> fields = root.fields();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> e = fields.next();
            String name = e.getKey();
            JsonNode child = e.getValue();
            if (TikaJsonSerializer.INSTANTIATED_CLASS_KEY.equals(name)) {
                continue;
            }
            setValue(name, child, obj, setters);
        }
        return obj;
    }
See the notes @link{TikaJsonSerializer}.
<p>
This currently requires a setString() option on objects that have enum parameters.
tika-serialization/src/main/java/org/apache/tika/serialization/TikaJsonDeserializer.java