code: public String getPropertyValue(final String propertyName, final boolean required) {
      String propertyValue = doGetPropertyValue(propertyName);
  
      if (StringUtils.isBlank(propertyValue) && getParent() != null) {
        propertyValue = getParent().getPropertyValue(propertyName, required);
      }
  
      if (StringUtils.isBlank(propertyValue) && required) {
        throw new ConfigurationException(String.format("The property (%1$s) is required!", propertyName));
      }
  
      return defaultIfUnset(propertyValue, null);
    }
docs: Gets the value of the configuration property identified by name.  The required parameter can be used to indicate
  the property is not required and that a ConfigurationException should not be thrown if the property is undeclared
  or undefined.
  
  @param propertyName a String value indicating the name of the configuration property.
  @param required used to indicate whether the configuration property is required to be declared and defined.
  @return the value of the configuration property identified by name.
  @throws ConfigurationException if and only if the property is required and the property is either undeclared
  or undefined.