@SuppressWarnings("unchecked")
    public T getValue() {
        final T value = (T) FROM_STRING.get(getConverterClass()).apply(JiveGlobals.getProperty(key), this);
        if (value == null || (Collection.class.isAssignableFrom(value.getClass()) && ((Collection) value).isEmpty())) {
            return defaultValue;
        }
        if (minValue != null && ((Comparable) minValue).compareTo(value) > 0) {
            LOGGER.warn("Configured value of {} is less than the minimum value of {} for the SystemProperty {} - will use default value of {} instead",
                value, minValue, key, defaultValue);
            return defaultValue;
        }
        if (maxValue != null && ((Comparable) maxValue).compareTo(value) < 0) {
            LOGGER.warn("Configured value of {} is more than the maximum value of {} for the SystemProperty {} - will use default value of {} instead",
                value, maxValue, key, defaultValue);
            return defaultValue;
        }
        return value;
    }
@return the current value of the SystemProperty, or the default value if it is not currently set to within the
configured constraints. {@code null} if the property has not been set and there is no default value.
xmppserver/src/main/java/org/jivesoftware/util/SystemProperty.java