private static Map<String, PropertyDescriptor> getProperties(Class<?> javaType) {
    Map<String, PropertyDescriptor> propertyDescriptorMap = new HashMap<>();
    for (PropertyDescriptor propertyDescriptor : PropertyUtils.getPropertyDescriptors(javaType)) {
      if (propertyDescriptor.getName().equals("class")) {
        continue;
      }
      if (propertyDescriptor.getReadMethod() == null || propertyDescriptor.getReadMethod() == null) {
        throw new RuntimeException("Both setter and getter of property " + propertyDescriptor.getName() + " are required.");
      }
      propertyDescriptorMap.put(propertyDescriptor.getName(), propertyDescriptor);
    }
    return propertyDescriptorMap;
  }