code: public void parseHints(InputStream inputStream) throws HintParseException, SAXException {
          try (
                  InputStream schemaStream13 = FileUtils.getResourceAsStream(HINT_SCHEMA_1_3);
                  InputStream schemaStream12 = FileUtils.getResourceAsStream(HINT_SCHEMA_1_2);
                  InputStream schemaStream11 = FileUtils.getResourceAsStream(HINT_SCHEMA_1_1);) {
              final HintHandler handler = new HintHandler();
              final SAXParser saxParser = XmlUtils.buildSecureSaxParser(schemaStream13, schemaStream12, schemaStream11);
              final XMLReader xmlReader = saxParser.getXMLReader();
              xmlReader.setErrorHandler(new HintErrorHandler());
              xmlReader.setContentHandler(handler);
              try (Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) {
                  final InputSource in = new InputSource(reader);
                  xmlReader.parse(in);
                  this.hintRules = handler.getHintRules();
                  this.vendorDuplicatingHintRules = handler.getVendorDuplicatingHintRules();
              }
          } catch (ParserConfigurationException | FileNotFoundException ex) {
              LOGGER.debug("", ex);
              throw new HintParseException(ex);
          } catch (SAXException ex) {
              if (ex.getMessage().contains("Cannot find the declaration of element 'hints'.")) {
                  throw ex;
              } else {
                  LOGGER.debug("", ex);
                  throw new HintParseException(ex);
              }
          } catch (IOException ex) {
              LOGGER.debug("", ex);
              throw new HintParseException(ex);
          }
      }
docs: Parses the given XML stream and returns a list of the hint rules
  contained.
  
  @param inputStream an InputStream containing hint rules
  @throws HintParseException thrown if the XML cannot be parsed
  @throws SAXException thrown if the XML cannot be parsed