# HG changeset patch # User joehw # Date 1556746528 25200 # Node ID a43d6467317d8f1e160f67aadec37919c9d64443 # Parent 41339a4687160a36d929e9bb4c968cc0fb01f0f4 8220818: Validator does not find missing match for keyref error Reviewed-by: lancea diff -r 41339a468716 -r a43d6467317d src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java Wed May 01 13:25:54 2019 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java Wed May 01 14:35:28 2019 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2019, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -111,7 +111,7 @@ * @author Elena Litani IBM * @author Andy Clark IBM * @author Neeraj Bajaj, Sun Microsystems, inc. - * @LastModified: Nov 2017 + * @LastModified: Apr 2019 */ public class XMLSchemaValidator implements XMLComponent, XMLDocumentFilter, FieldActivator, RevalidationHandler, XSElementDeclHelper { @@ -2429,7 +2429,7 @@ fValueStoreCache.getValueStoreFor(id, selMatcher.getInitialDepth()); // nothing to do if nothing matched, or if not all // fields are present. - if (values != null && values.fValuesCount == values.fFieldCount) + if (values != null && values.fHasValue) values.endDocumentFragment(); } } @@ -3718,6 +3718,7 @@ /** Current data value count. */ protected int fValuesCount; + protected boolean fHasValue = false; /** global data */ public final Vector fValues = new Vector<>(); @@ -3885,6 +3886,7 @@ } else { fValuesCount++; + fHasValue = true; } fLocalValues[i] = actualValue; fLocalValueTypes[i] = valueType; diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/ValidationTest.java Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +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.SAXParseException; + +/* + * @test + * @bug 8220818 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @run testng/othervm validation.ValidationTest + * @summary Runs validations with schemas and sources + */ +@Listeners({jaxp.library.FilePolicy.class}) +public class ValidationTest { + static final String FILE_PATH = "files/"; + /* + DataProvider: valid xml + */ + @DataProvider(name = "valid") + Object[][] getValid() { + return new Object[][]{ + {"JDK8220818a.xsd", "JDK8220818a_Valid.xml"}, + {"JDK8220818a.xsd", "JDK8220818a_Valid1.xml"}, + {"JDK8220818b.xsd", "JDK8220818b_Valid.xml"}, + }; + } + + /* + DataProvider: invalid xml + */ + @DataProvider(name = "invalid") + Object[][] getInvalid() { + return new Object[][]{ + {"JDK8220818a.xsd", "JDK8220818a_Invalid.xml"}, + {"JDK8220818b.xsd", "JDK8220818b_Invalid.xml"}, + }; + } + + @Test(dataProvider = "invalid", expectedExceptions = SAXParseException.class) + public void testValidateRefType(String xsd, String xml) throws Exception { + validate(xsd, xml); + } + + @Test(dataProvider = "valid") + public void testValidateRefType1(String xsd, String xml) throws Exception { + validate(xsd, xml); + } + + 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()))); + } +} diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a.xsd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a.xsd Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Invalid.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Invalid.xml Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Valid.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Valid.xml Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,4 @@ + + xyz + + diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Valid1.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818a_Valid1.xml Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,3 @@ + + + diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b.xsd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b.xsd Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b_Invalid.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b_Invalid.xml Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff -r 41339a468716 -r a43d6467317d test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b_Valid.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jaxp/javax/xml/jaxp/unittest/validation/files/JDK8220818b_Valid.xml Wed May 01 14:35:28 2019 -0700 @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + +