package org.geoserver.csw.records.iso; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.xml.XMLConstants; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.custommonkey.xmlunit.SimpleNamespaceContext; import org.custommonkey.xmlunit.XMLUnit; import org.geoserver.csw.store.internal.CSWInternalTestSupport; import org.geotools.csw.CSW; import org.geotools.filter.v1_1.OGC; import org.geotools.ows.OWS; import org.geotools.xlink.XLINK; import org.junit.BeforeClass; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; /** * * @author Niels Charlier * */ public class MDTestSupport extends CSWInternalTestSupport { @BeforeClass public static void configureXMLUnit() throws Exception { // init xmlunit Map<String, String> namespaces = new HashMap<String, String>(); namespaces.put("csw", CSW.NAMESPACE); namespaces.put("ows", OWS.NAMESPACE); namespaces.put("ogc", OGC.NAMESPACE); namespaces.put("gml", "http://www.opengis.net/gml"); namespaces.put("xlink", XLINK.NAMESPACE); namespaces.put("xsi", "http://www.w3.org/2001/XMLSchema-instance"); namespaces.put("xsd", "http://www.w3.org/2001/XMLSchema"); namespaces.put("xs", "http://www.w3.org/2001/XMLSchema"); namespaces.put("gmd", MetaDataDescriptor.NAMESPACE_GMD); namespaces.put("gco", MetaDataDescriptor.NAMESPACE_GCO); XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(namespaces)); }; //Lazy Loading. private static Validator validator; protected static Validator getValidator() { if (validator == null) { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema; try { schema = factory.newSchema(new StreamSource(MDTestSupport.class.getResource("/net/opengis/schemas/iso/19139/20070417/gmd/metadataEntity.xsd").toString())); } catch (SAXException e) { throw new RuntimeException(e); } validator = schema.newValidator(); } return validator; } protected static void validateSchema(NodeList xml) throws SAXException, IOException { for (int i=0; i < xml.getLength(); i++) { getValidator().validate(new DOMSource(xml.item(i))); } } }