/**
   * Build a persistence.xml file into a SEPersistenceUnitInfo object. May eventually change this to
   * use OX mapping as well.
   */
  private static List<SEPersistenceUnitInfo> processPersistenceXML(
      URL baseURL, InputStream input, ClassLoader loader) {
    SAXParserFactory spf = XMLHelper.createParserFactory(false);

    XMLReader xmlReader = null;
    SAXParser sp = null;
    XMLExceptionHandler xmlErrorHandler = new XMLExceptionHandler();
    // 247735 - remove the validation of XML.

    // create a SAX parser
    try {
      sp = spf.newSAXParser();
    } catch (ParserConfigurationException | SAXException exc) {
      throw XMLParseException.exceptionCreatingSAXParser(baseURL, exc);
    }

    // create an XMLReader
    try {
      xmlReader = sp.getXMLReader();
      xmlReader.setErrorHandler(xmlErrorHandler);
    } catch (org.xml.sax.SAXException exc) {
      throw XMLParseException.exceptionCreatingXMLReader(baseURL, exc);
    }

    PersistenceContentHandler myContentHandler = new PersistenceContentHandler();
    xmlReader.setContentHandler(myContentHandler);

    InputSource inputSource = new InputSource(input);
    try {
      xmlReader.parse(inputSource);
    } catch (IOException exc) {
      throw PersistenceUnitLoadingException.exceptionProcessingPersistenceXML(baseURL, exc);
    } catch (org.xml.sax.SAXException exc) {
      // XMLErrorHandler will handle SAX exceptions
    }

    // handle any parse exceptions
    XMLException xmlError = xmlErrorHandler.getXMLException();
    if (xmlError != null) {
      throw PersistenceUnitLoadingException.exceptionProcessingPersistenceXML(baseURL, xmlError);
    }

    Iterator<SEPersistenceUnitInfo> persistenceInfos =
        myContentHandler.getPersistenceUnits().iterator();
    while (persistenceInfos.hasNext()) {
      SEPersistenceUnitInfo info = persistenceInfos.next();
      info.setPersistenceUnitRootUrl(baseURL);
      info.setClassLoader(loader);
      info.setNewTempClassLoader(loader);
    }
    return myContentHandler.getPersistenceUnits();
  }