docs: def validate(self):
          """ Applies all defined validation to the current
          state of the object, and raises an error if
          they are not all met.
  
          Raises:
              ValidationError: if validations do not pass
          """
  
          missing = self.missing_property_names()
  
          if len(missing) > 0:
              raise validators.ValidationError(
                  "'{0}' are required attributes for {1}"
                              .format(missing, self.__class__.__name__))
  
          for prop, val in six.iteritems(self._properties):
              if val is None:
                  continue
  
              if isinstance(val, ProtocolBase):
                  val.validate()
              elif getattr(val, 'isLiteralClass', None) is True:
                  val.validate()
              elif isinstance(val, list):
                  for subval in val:
                    subval.validate()
              else:
                  # This object is of the wrong type, but just try setting it
                  # The property setter will enforce its correctness
                  # and handily coerce its type at the same time
                  setattr(self, prop, val)
  
          return True