code: public final void setAdditionalProperties(final Map<String, String> additionalProperties) {
  
          // no need for validation, the method will create a new (empty) object if the provided parameter is null.
  
          // create a defensive copy of the map and all its properties
          if (additionalProperties == null) {
              // create a new (empty) properties map if the provided parameter was null
              this.additionalProperties = new ConcurrentHashMap<>();
          } else {
              // create a defensive copy of the map and all its properties
              // the code looks a little more complicated than a simple "putAll()", but it catches situations
              // where a Map is provided that supports null values (e.g. a HashMap) vs Map implementations
              // that do not (e.g. ConcurrentHashMap).
              this.additionalProperties = new ConcurrentHashMap<>();
              for (final Map.Entry<String, String> entry : additionalProperties.entrySet()) {
                  final String key = entry.getKey();
                  final String value = entry.getValue();
  
                  if (value != null) {
                      this.additionalProperties.put(key, value);
                  }
              }
          }
      }
docs: Any additional properties which have not been parsed, and for which no getter/setter exists, but are to be
  stored in this object nevertheless.
  <p>
  This property is commonly used to preserve original properties from upstream components that are to be passed
  on to downstream components unchanged. This properties set may or may not include properties that have been
  extracted from the map, and been made available through this POJO.
  <p>
  Note that these additional properties may be <code>null</code> or empty, even in a fully populated POJO where
  other properties commonly have values assigned to.
  
  @param additionalProperties The additional properties to store