@Override
    public boolean areEqual(Object one, Object another) {
        if (one == another) {
            return true;
        }
        if (one == null || another == null) {
            return false;
        }
        if (one instanceof String && another instanceof String) {
            return one.equals(another);
        }
        if ((one instanceof Collection && another instanceof Collection) ||
            (one instanceof Map && another instanceof Map)) {
            return Objects.equals(one, another);
        }
        if (one.getClass().equals(another.getClass())) {
            Method equalsMethod = ReflectionUtils.getMethodOrNull(one.getClass(), "equals", Object.class);
            if (equalsMethod != null && !Object.class.equals(equalsMethod.getDeclaringClass())) {
                return one.equals(another);
            }
        }
        return objectMapperWrapper.toJsonNode(objectMapperWrapper.toString(one)).equals(
            objectMapperWrapper.toJsonNode(objectMapperWrapper.toString(another))
        );
    }
@Test
    public void testAbstractClassImplementationsAreEqual() {
        JsonTypeDescriptor descriptor = new JsonTypeDescriptor();

        FormImpl firstEntity = new FormImpl("value1");
        FormImpl secondEntity = new FormImpl("value2");

        assertTrue(descriptor.areEqual(firstEntity, secondEntity));
    }