You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mu...@apache.org on 2019/12/22 06:45:03 UTC

svn commit: r1871903 - in /xerces/java/trunk: src/org/apache/xerces/impl/xs/ tests/idc/

Author: mukulg
Date: Sun Dec 22 06:45:03 2019
New Revision: 1871903

URL: http://svn.apache.org/viewvc?rev=1871903&view=rev
Log:
xsd idc constraints fixes: committing fix for jira issues XERCESJ-1594 & XERCESJ-1714. this fix, as a side effect also modifies the logic of fix for XERCESJ-1515. committing few new related test cases as well. the fix for XERCESJ-1714 in this commit, borrows fix from openjdk's xsd validator. 

Added:
    xerces/java/trunk/tests/idc/jira_1594.xml
    xerces/java/trunk/tests/idc/jira_1594.xsd
    xerces/java/trunk/tests/idc/jira_1714.xsd
    xerces/java/trunk/tests/idc/jira_1714_invalid.xml
    xerces/java/trunk/tests/idc/jira_1714_valid.xml
Modified:
    xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
    xerces/java/trunk/tests/idc/IDConstraintTests.java

Modified: xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=1871903&r1=1871902&r2=1871903&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java Sun Dec 22 06:45:03 2019
@@ -2442,7 +2442,7 @@ public class XMLSchemaValidator
                             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();
                     }
                 }
@@ -3714,6 +3714,7 @@ public class XMLSchemaValidator
 
         /** Current data value count. */
         protected int fValuesCount;
+        protected boolean fHasValue = false;
 
         /** global data */
         public final Vector fValues = new Vector();
@@ -3881,6 +3882,7 @@ public class XMLSchemaValidator
             } 
             else {
                 fValuesCount++;
+                fHasValue = true;
             }
             fLocalValues[i] = actualValue;
             fLocalValueTypes[i] = valueType;

Modified: xerces/java/trunk/tests/idc/IDConstraintTests.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/IDConstraintTests.java?rev=1871903&r1=1871902&r2=1871903&view=diff
==============================================================================
--- xerces/java/trunk/tests/idc/IDConstraintTests.java (original)
+++ xerces/java/trunk/tests/idc/IDConstraintTests.java Sun Dec 22 06:45:03 2019
@@ -506,5 +506,63 @@ public class IDConstraintTests extends X
            assertTrue(false);
         }
     }
+    
+    public void testIDConstraint25() {        
+        String xmlfile = "tests/idc/jira_1594.xml";
+        String schemapath = "tests/idc/jira_1594.xsd";   
+        try {
+            Schema s = fSchemaFactory.newSchema(new StreamSource(schemapath));
+            Validator v = s.newValidator();
+            v.setErrorHandler(this);
+            v.validate(new StreamSource(xmlfile));
+            assertTrue(failureList.size() == 1);
+            // test expected error messages
+            List expectedMsgList = new ArrayList();
+            FailureMesgFragments mesgFragments = new FailureMesgFragments();
+            mesgFragments.setMessageFragment("cvc-identity-constraint.4.3: Key 'keyref' with value '1' not found for identity constraint of element 'personnel'");
+            expectedMsgList.add(mesgFragments);            
+            assertTrue(areErrorMessagesConsistent(expectedMsgList));            
+        } catch(Exception ex) {
+           ex.printStackTrace();
+           assertTrue(false);
+        }
+    }
+    
+    public void testIDConstraint26() {
+        String xmlfile = "tests/idc/jira_1714_valid.xml";
+        String schemapath = "tests/idc/jira_1714.xsd";    
+        try {
+            Schema s = fSchemaFactory.newSchema(new StreamSource(schemapath));
+            Validator v = s.newValidator();
+            v.setErrorHandler(this);
+            v.validate(new StreamSource(xmlfile));
+            assertNull(fErrSysId);
+            assertNull(fFatErrSysId);
+        } catch(Exception ex) {
+           ex.printStackTrace();
+           assertTrue(false);
+        }
+    }
+    
+    public void testIDConstraint27() {        
+        String xmlfile = "tests/idc/jira_1714_invalid.xml";
+        String schemapath = "tests/idc/jira_1714.xsd";   
+        try {
+            Schema s = fSchemaFactory.newSchema(new StreamSource(schemapath));
+            Validator v = s.newValidator();
+            v.setErrorHandler(this);
+            v.validate(new StreamSource(xmlfile));
+            assertTrue(failureList.size() == 1);
+            // test expected error messages
+            List expectedMsgList = new ArrayList();
+            FailureMesgFragments mesgFragments = new FailureMesgFragments();
+            mesgFragments.setMessageFragment("cvc-identity-constraint.4.3: Key 'Collectiontype_defined' with value 'object1' not found for identity constraint of element 'Root'");
+            expectedMsgList.add(mesgFragments);            
+            assertTrue(areErrorMessagesConsistent(expectedMsgList));            
+        } catch(Exception ex) {
+           ex.printStackTrace();
+           assertTrue(false);
+        }
+    }
 
 }

Added: xerces/java/trunk/tests/idc/jira_1594.xml
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/jira_1594.xml?rev=1871903&view=auto
==============================================================================
--- xerces/java/trunk/tests/idc/jira_1594.xml (added)
+++ xerces/java/trunk/tests/idc/jira_1594.xml Sun Dec 22 06:45:03 2019
@@ -0,0 +1,13 @@
+<personnel>
+    <person id="111">
+        <name>name</name>
+        <ref>1</ref>
+    </person>
+    <person id="222">
+        <name>name</name>
+        <ref>2</ref>
+    </person>
+    <person id="333">
+        <name>name</name>
+    </person>
+</personnel>
\ No newline at end of file

Added: xerces/java/trunk/tests/idc/jira_1594.xsd
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/jira_1594.xsd?rev=1871903&view=auto
==============================================================================
--- xerces/java/trunk/tests/idc/jira_1594.xsd (added)
+++ xerces/java/trunk/tests/idc/jira_1594.xsd Sun Dec 22 06:45:03 2019
@@ -0,0 +1,29 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:element name="personnel">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="person" maxOccurs="unbounded"/>
+      </xs:sequence>
+    </xs:complexType>
+    <xs:key name="key">
+      <xs:selector xpath="person"/>
+      <xs:field xpath="@id"/>
+    </xs:key>
+    <xs:keyref refer="key" name="keyref">
+      <xs:selector xpath="person"/>
+      <xs:field xpath="ref"/>
+    </xs:keyref>
+  </xs:element>
+
+  <xs:element name="person">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="name" type="xs:string"/>
+        <xs:element name="ref" type="xs:integer" minOccurs="0"/>
+      </xs:sequence>
+      <xs:attribute name="id" type="xs:integer" use="required"/>
+    </xs:complexType>
+  </xs:element>
+
+</xs:schema>
\ No newline at end of file

Added: xerces/java/trunk/tests/idc/jira_1714.xsd
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/jira_1714.xsd?rev=1871903&view=auto
==============================================================================
--- xerces/java/trunk/tests/idc/jira_1714.xsd (added)
+++ xerces/java/trunk/tests/idc/jira_1714.xsd Sun Dec 22 06:45:03 2019
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:example="http://www.example.org/root"
+           xmlns="http://www.example.org/root"
+           targetNamespace="http://www.example.org/root"
+           elementFormDefault="qualified" attributeFormDefault="unqualified">
+    <xs:element name="Root">
+        <xs:complexType>
+            <xs:choice maxOccurs="unbounded">
+                <xs:element ref="Object" />
+            </xs:choice>
+        </xs:complexType>
+        <xs:key name="name_key">
+            <xs:selector xpath=".//example:Object" />
+            <xs:field xpath="@name" />
+        </xs:key>
+        <xs:keyref name="Collectiontype_defined" refer="name_key">
+            <xs:selector xpath=".//example:CollectionMember" />
+            <xs:field xpath="@type" />
+        </xs:keyref>
+    </xs:element>
+    <xs:element name="Members">
+        <xs:complexType>
+            <xs:group ref="example:memberTypes" minOccurs="0"
+                      maxOccurs="unbounded" />
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="Object">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="Members" minOccurs="0" />
+            </xs:sequence>
+            <xs:attributeGroup ref="example:typedMemberAttributes" />
+            <xs:attributeGroup ref="example:namedMemberAttributes" />
+        </xs:complexType>
+        <xs:unique name="ObjectElementNameUniqueness">
+            <xs:selector xpath="example:Members/*" />
+            <xs:field xpath="@name" />
+        </xs:unique>
+    </xs:element>
+    <xs:element name="Collection">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="CollectionMembers" />
+            </xs:sequence>
+            <xs:attributeGroup ref="example:namedMemberAttributes" />
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="CollectionMembers">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="CollectionMember" minOccurs="2"
+                            maxOccurs="unbounded" />
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="CollectionMember">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="Members" minOccurs="0"
+                            maxOccurs="unbounded" />
+            </xs:sequence>
+            <xs:attributeGroup ref="example:typedMemberAttributes" />
+            <xs:attributeGroup ref="example:namedMemberAttributes" />
+        </xs:complexType>
+    </xs:element>
+    <xs:element name="String">
+        <xs:complexType>
+            <xs:attributeGroup ref="example:namedMemberAttributes" />
+        </xs:complexType>
+    </xs:element>
+    <xs:group name="memberTypes">
+        <xs:choice>
+            <xs:element ref="String" />
+            <xs:element ref="Collection" />
+        </xs:choice>
+    </xs:group>
+    <xs:attributeGroup name="namedMemberAttributes">
+        <xs:attribute name="name" type="xs:Name" use="required" />
+    </xs:attributeGroup>
+    <xs:attributeGroup name="typedMemberAttributes">
+        <xs:attribute name="type" type="xs:Name" />
+    </xs:attributeGroup>
+</xs:schema>
\ No newline at end of file

Added: xerces/java/trunk/tests/idc/jira_1714_invalid.xml
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/jira_1714_invalid.xml?rev=1871903&view=auto
==============================================================================
--- xerces/java/trunk/tests/idc/jira_1714_invalid.xml (added)
+++ xerces/java/trunk/tests/idc/jira_1714_invalid.xml Sun Dec 22 06:45:03 2019
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<Root xmlns="http://www.example.org/root">
+
+    <Object name="object2">
+        <Members>
+            <Collection name="Collection1">
+                <CollectionMembers>
+                    <CollectionMember name="Collectionmember1" type="object1" />
+                    <CollectionMember name="Collectionmember2" >
+                        <Members>
+                            <String name="string1" />
+                        </Members>
+                    </CollectionMember>
+                </CollectionMembers>
+            </Collection>
+        </Members>
+    </Object>
+</Root>
\ No newline at end of file

Added: xerces/java/trunk/tests/idc/jira_1714_valid.xml
URL: http://svn.apache.org/viewvc/xerces/java/trunk/tests/idc/jira_1714_valid.xml?rev=1871903&view=auto
==============================================================================
--- xerces/java/trunk/tests/idc/jira_1714_valid.xml (added)
+++ xerces/java/trunk/tests/idc/jira_1714_valid.xml Sun Dec 22 06:45:03 2019
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<Root xmlns="http://www.example.org/root">
+
+    <Object name="object1">
+        <Members>
+            <String name="string1" />
+        </Members>
+    </Object>
+
+    <Object name="object2">
+        <Members>
+            <Collection name="Collection1">
+                <CollectionMembers>
+                    <CollectionMember name="Collectionmember1" type="object1" />
+                    <CollectionMember name="Collectionmember2" >
+                        <Members>
+                            <String name="string1" />
+                        </Members>
+                    </CollectionMember>
+                </CollectionMembers>
+            </Collection>
+        </Members>
+    </Object>
+</Root>
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org