package org.gbif.dwca.tools;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;

/**
 * Utility class that exposes a singleton instance of an xml validator for the dwc archive meta.xml descriptor.
 */
public class MetaValidator {
  private static final Logger LOG = LoggerFactory.getLogger(MetaValidator.class);
  private static final String SCHEMA_LANG = "http://www.w3.org/2001/XMLSchema";
  private static final String XSD_SCHEMA = "https://raw.githubusercontent.com/tdwg/dwc/master/text/tdwg_dwc_text.xsd";
  private static Validator VALIDATOR;

  public static void validate(String xml) throws IllegalArgumentException, IOException, SAXException {
    validate(new StreamSource(new StringReader(xml)));
  }

  public static void validate(InputStream xml) throws IllegalArgumentException, IOException, SAXException {
    validate(new StreamSource(xml));
  }

  /**
   * @throws IllegalArgumentException
   *      If the <code>Source</code>
   *      is an XML artifact that the implementation cannot
   *      validate (for example, a processing instruction).
   *
   * @throws SAXException
   *      If the {@link org.xml.sax.ErrorHandler} throws a {@link SAXException} or
   *      if a fatal error is found and the {@link org.xml.sax.ErrorHandler} returns
   *      normally.
   *
   * @throws IOException
   *      If the validator is processing a
   *      {@link javax.xml.transform.sax.SAXSource} and the
   *      underlying {@link org.xml.sax.XMLReader} throws an
   *      {@link IOException}.
   *
   *
   * @throws NullPointerException If <code>source</code> is
   *   <code>null</code>.
   */
  public static void validate(Source source) throws IllegalArgumentException, IOException, SAXException {
    getValidator().validate(source);
    LOG.debug("XML passed validation");
  }

  public static Validator getValidator() throws IOException, SAXException {
    if (VALIDATOR == null) {
      // define the type of schema - we use W3C:
      // resolve validation driver:
      SchemaFactory factory = SchemaFactory.newInstance(SCHEMA_LANG);
      // create schema by reading it from gbif online resources:
      Schema schema = factory.newSchema(new StreamSource(XSD_SCHEMA));
      VALIDATOR = schema.newValidator();
    }
    return VALIDATOR;
  }
}

@@ -519,17 +519,67 @@
 ptor.%0A *
-/
+ @Deprecated use validator for that%0A */%0A@Deprecated
 %0Apublic 
@@ -856,16 +856,35 @@
 /master/
+standard/documents/
 text/tdw

fix MetaValidator after changes in dwc GitHub MetaValidator is now deprecated (should use validator)