code: def check_config_xml(self, contents):
          
          self.log(u"Checking contents XML config file")
          self.result = ValidatorResult()
          if self._are_safety_checks_disabled(u"check_config_xml"):
              return self.result
          contents = gf.safe_bytes(contents)
          self.log(u"Checking that contents is well formed")
          self.check_raw_string(contents, is_bstring=True)
          if not self.result.passed:
              return self.result
          self.log(u"Checking required parameters for job")
          job_parameters = gf.config_xml_to_dict(contents, self.result, parse_job=True)
          self._check_required_parameters(self.XML_JOB_REQUIRED_PARAMETERS, job_parameters)
          if not self.result.passed:
              return self.result
          self.log(u"Checking required parameters for task")
          tasks_parameters = gf.config_xml_to_dict(contents, self.result, parse_job=False)
          for parameters in tasks_parameters:
              self.log([u"Checking required parameters for task: '%s'", parameters])
              self._check_required_parameters(self.XML_TASK_REQUIRED_PARAMETERS, parameters)
              if not self.result.passed:
                  return self.result
          return self.result
docs: Check whether the given XML config file contents
          is well-formed and it has all the required parameters.
  
          :param string contents: the XML config file contents or XML config string
          :param bool is_config_string: if ``True``, contents is a config string
          :rtype: :class:`~aeneas.validator.ValidatorResult`