docs: private boolean getBooleanProperty(String key, String defaultValue, StringBuilder errors) {
          boolean booleanValue = false;
          String stringValue = null;
          boolean valueCorrect = false;
  
          // Pull the key from the property map
          Object objectValue = this.properties.get(key);
          if (objectValue != null) {
              if (objectValue instanceof Boolean) {
                  booleanValue = ((Boolean) objectValue).booleanValue();
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Property " + key + " set to " + booleanValue);
                  }
                  return booleanValue;
              } else if (objectValue instanceof String) {
                  stringValue = (String) objectValue;
              }
          } else {
              // Key is not in map.
              if (defaultValue != null) {
                  stringValue = defaultValue;
              } else {
                  // No default provided. Error.
                  errors.append(key);
                  errors.append(':');
                  errors.append(stringValue);
                  errors.append('\n');
                  return false;
              }
          }
  
          // If we get this far, we have a non null string value to work with. May be the default.
          // Verify the value.
          if (stringValue != null) {
              if (stringValue.equals("true")) {
                  booleanValue = true;
                  valueCorrect = true;
              } else if (stringValue.equals("false")) {
                  booleanValue = false;
                  valueCorrect = true;
              }
          }
          if (valueCorrect) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Property " + key + " set to " + booleanValue);
              }
          } else {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Property " + key + " has invalid value " + stringValue);
              }
              errors.append(key);
              errors.append(':');
              errors.append(stringValue);
              errors.append('\n');
          }
          return booleanValue;
      }