< prev index next >
test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java
Print this page
*** 23,45 ****
package validation;
import java.io.File;
! import java.net.URL;
!
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.testng.annotations.DataProvider;
-
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/*
* @test
* @bug 8220818 8176447
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
--- 23,53 ----
package validation;
import java.io.File;
! import java.io.FileInputStream;
import javax.xml.XMLConstants;
+ import javax.xml.parsers.SAXParserFactory;
+ import javax.xml.stream.XMLInputFactory;
+ import javax.xml.stream.XMLStreamReader;
+ import javax.xml.stream.events.XMLEvent;
+ import javax.xml.transform.Source;
+ import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
+ import org.xml.sax.Attributes;
+ import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
+ import org.xml.sax.XMLFilter;
+ import org.xml.sax.helpers.XMLFilterImpl;
/*
* @test
* @bug 8220818 8176447
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
*** 104,119 ****
--- 112,179 ----
@Test(dataProvider = "uniqueness", expectedExceptions = SAXException.class)
public void testUnique(String xsd, String xml) throws Exception {
validate(xsd, xml);
}
+ /**
+ * @bug 8068376
+ * Verifies that validation performs normally with externally provided string
+ * parameters.
+ * @throws Exception if the test fails
+ */
+ @Test
+ public void testJDK8068376() throws Exception {
+
+ String xsdFile = getClass().getResource(FILE_PATH + "JDK8068376.xsd").getFile();
+ String xmlFile = getClass().getResource(FILE_PATH + "JDK8068376.xml").getFile();
+ String targetNamespace = getTargetNamespace(xsdFile);
+
+ XMLFilter namespaceFilter = new XMLFilterImpl(SAXParserFactory.newDefaultNSInstance().newSAXParser().getXMLReader()) {
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+ uri = targetNamespace; // overwriting the uri with our own choice
+ super.startElement(uri, localName, qName, atts);
+ }
+ };
+
+ Source xmlSource = new SAXSource(namespaceFilter, new InputSource(xmlFile));
+ Source schemaSource = new StreamSource(xsdFile);
+ validate(schemaSource, xmlSource);
+
+ }
+
+ private static String getTargetNamespace(String xsdFile) throws Exception {
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(xsdFile));
+ while (reader.hasNext()) {
+ int event = reader.next();
+
+ // Get the root element's "targetNamespace" attribute
+ if (event == XMLEvent.START_ELEMENT) {
+ // validation fails before patch
+ String value = reader.getAttributeValue(null, "targetNamespace"); // fails validation
+ // validation passes due to a reference comparison in the original code
+ // String value = "mynamespace";
+ return value;
+ }
+ }
+ return null;
+ }
+
private void validate(String xsd, String xml) throws Exception {
final SchemaFactory schemaFactory = SchemaFactory.newInstance(
XMLConstants.W3C_XML_SCHEMA_NS_URI);
final Schema schema = schemaFactory.newSchema(
new File(getClass().getResource(FILE_PATH + xsd).getFile()));
final Validator validator = schema.newValidator();
validator.validate(new StreamSource(
new File(getClass().getResource(FILE_PATH + xml).getFile())));
}
+ private void validate(Source xsd, Source xml) throws Exception {
+ final SchemaFactory schemaFactory = SchemaFactory.newInstance(
+ XMLConstants.W3C_XML_SCHEMA_NS_URI);
+ final Schema schema = schemaFactory.newSchema(xsd);
+ final Validator validator = schema.newValidator();
+ validator.validate(xml);
+ }
+
}
< prev index next >