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 2022/04/16 09:53:37 UTC

svn commit: r1899904 - in /xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl: dv/xs/ msg/ xs/ xs/assertion/

Author: mukulg
Date: Sat Apr 16 09:53:36 2022
New Revision: 1899904

URL: http://svn.apache.org/viewvc?rev=1899904&view=rev
Log:
committing fix for jira issue, XERCESJ-1744

Modified:
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertXPath2EngineImpl.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
    xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java?rev=1899904&r1=1899903&r2=1899904&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java Sat Apr 16 09:53:36 2022
@@ -3887,5 +3887,10 @@ public class XSSimpleTypeDecl implements
         }
         sb.append(']');
     }
+    
+    public Vector getAssertions() {
+       return fAssertion;    
+    }
+    
 } // class XSSimpleTypeDecl
 

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties?rev=1899904&r1=1899903&r2=1899904&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties Sat Apr 16 09:53:36 2022
@@ -77,6 +77,7 @@
         cvc-datatype-valid.1.2.2 = cvc-datatype-valid.1.2.2: ''{0}'' is not a valid value of list type ''{1}''.
         cvc-datatype-valid.1.2.3 = cvc-datatype-valid.1.2.3: ''{0}'' is not a valid value of union type ''{1}''.
         cvc-datatype-valid.1.2.4 = cvc-datatype-valid.1.2.4: The NOTATION type, ''{0}'' used to validate ''{1}'', must have an enumeration facet value which specifies the notation elements used by this type.
+        cvc-datatype-valid.4.1.4 = cvc-datatype-valid.4.1.4: The value ''{0}'' of element ''{1}'' is not valid with the required simple type. Value ''{2}'' is not valid with any member of union type ''{3}''.
         cvc-elt.1.a = cvc-elt.1.a: Cannot find the declaration of element ''{0}''.
         cvc-elt.1.b = cvc-elt.1.b: The name of the element does not match the name of the element declaration. Saw ''{0}''. Expected ''{1}''.
         cvc-elt.2 = cvc-elt.2: The value of '{'abstract'}' in the element declaration for ''{0}'' must be false.

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertXPath2EngineImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertXPath2EngineImpl.java?rev=1899904&r1=1899903&r2=1899904&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertXPath2EngineImpl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertXPath2EngineImpl.java Sat Apr 16 09:53:36 2022
@@ -381,24 +381,70 @@ public class XMLAssertXPath2EngineImpl e
      * Evaluate assertions from a "simple type" definition, on elements.
      */
     private void evaluateAssertionsFromSimpleType(QName element, List assertions, String value, Augmentations augs) throws Exception {  
-              
-        XSSimpleTypeDefinition simpleTypeDefn = (XSSimpleTypeDefinition) ((ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI)).getTypeDefinition();
-        boolean isTypeDerivedFromList = isTypeDerivedFromSTList(simpleTypeDefn);
-        boolean isTypeDerivedFromUnion = isTypeDerivedFromSTUnion(simpleTypeDefn);
-        
-        Vector assertList = (Vector) assertions;
-        for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
-            XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
-            String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); 
-            if (xPathDefaultNamespace != null) {
-                fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);  
-            }
-            evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null, false);
+
+        if (assertions.get(0) instanceof XSSimpleTypeDecl) {
+           // handling, assertions on, simpleType with variety list whose itemType is union
+
+           // tokenize the list value by a sequence of white spaces
+           StringTokenizer listStrTokens = new StringTokenizer(value, " \n\t\r");
+           while (listStrTokens.hasMoreTokens()) {
+              String listItemStrValue = listStrTokens.nextToken();
+              // iterate over all the members types of union
+              boolean isListItemValidWithXSNsType = false;
+              for (int idx = 0; idx < assertions.size(); idx++) {
+                  XSSimpleTypeDecl xsSimpleTypeDecl = (XSSimpleTypeDecl)assertions.get(idx);
+                  if (SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(xsSimpleTypeDecl.getNamespace()) && 
+                                                         XS11TypeHelper.isStrValueValidForASimpleType(listItemStrValue, 
+                                                                                                      xsSimpleTypeDecl, Constants.SCHEMA_VERSION_1_1)) {
+                     isListItemValidWithXSNsType = true; 
+                     break; 
+                  }   
+              }
+              if (!isListItemValidWithXSNsType) {
+                  for (int idx = 0; idx < assertions.size(); idx++) {
+                      XSSimpleTypeDecl xsSimpleTypeDecl = (XSSimpleTypeDecl)assertions.get(idx);
+                      if (!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(xsSimpleTypeDecl.getNamespace()) && 
+                                                         XS11TypeHelper.isStrValueValidForASimpleType(listItemStrValue, 
+                                                                                                      xsSimpleTypeDecl, Constants.SCHEMA_VERSION_1_1)) {
+                          Vector assertVector = xsSimpleTypeDecl.getAssertions();
+                          if (assertVector != null) {
+                              for (int idx1 = 0; idx1 < assertVector.size(); idx1++) {
+                                  setXDMTypedValueOf$valueForSTVarietyAtomic(listItemStrValue, getXercesXSDTypeCodeFor$value((XSTypeDefinition)xsSimpleTypeDecl), 
+                                                                             fXpath2DynamicContext);                        
+                                  AssertionError assertError = evaluateOneAssertion(element, (XSAssertImpl)assertVector.get(idx1), listItemStrValue, false, true);
+                                  if (assertError != null) {                                 
+                                     XSSimpleTypeDefinition simpleTypeDefn = (XSSimpleTypeDefinition) ((ElementPSVI) 
+                                                                                               augs.getItem(Constants.ELEMENT_PSVI)).getTypeDefinition(); 
+                                     fXmlSchemaValidator.reportSchemaError("cvc-datatype-valid.4.1.4", new Object[] {value, element.rawname, 
+                                                                             listItemStrValue, XS11TypeHelper.getSchemaTypeName((XSTypeDefinition)
+                                                                                                                            simpleTypeDefn.getItemType())});
+                                  } 
+                              }
+                          }
+                      }  
+                  }
+              }
+           }
         }
-        
-        // evaluate assertions on itemType of xs:list
-        if (isTypeDerivedFromList && simpleTypeDefn.getItemType() != null) {
-            evaluateAssertsFromItemTypeOfSTList(element, simpleTypeDefn.getItemType(), value, false); 
+        else {
+            XSSimpleTypeDefinition simpleTypeDefn = (XSSimpleTypeDefinition) ((ElementPSVI) augs.getItem(Constants.ELEMENT_PSVI)).getTypeDefinition();
+            boolean isTypeDerivedFromList = isTypeDerivedFromSTList(simpleTypeDefn);
+            boolean isTypeDerivedFromUnion = isTypeDerivedFromSTUnion(simpleTypeDefn);
+            
+            Vector assertList = (Vector) assertions;
+            for (int assertIdx = 0; assertIdx < assertList.size(); assertIdx++) {
+                XSAssertImpl assertImpl = (XSAssertImpl) assertList.get(assertIdx);
+                String xPathDefaultNamespace = assertImpl.getXPathDefaultNamespace(); 
+                if (xPathDefaultNamespace != null) {
+                    fXpath2DynamicContext.add_namespace(null, xPathDefaultNamespace);  
+                }
+                evaluateOneAssertionFromSimpleType(element, value, augs, simpleTypeDefn, isTypeDerivedFromList, isTypeDerivedFromUnion, assertImpl, false, null, false);
+            }
+            
+            // evaluate assertions on itemType of xs:list
+            if (isTypeDerivedFromList && simpleTypeDefn.getItemType() != null) {
+                evaluateAssertsFromItemTypeOfSTList(element, simpleTypeDefn.getItemType(), value, false); 
+            }
         }
         
     } // evaluateAssertionsFromSimpleType

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java?rev=1899904&r1=1899903&r2=1899904&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java Sat Apr 16 09:53:36 2022
@@ -27,6 +27,7 @@ import java.util.Vector;
 import org.apache.xerces.impl.Constants;
 import org.apache.xerces.impl.dv.ValidatedInfo;
 import org.apache.xerces.impl.dv.XSSimpleType;
+import org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl;
 import org.apache.xerces.impl.xs.assertion.XMLAssertHandler;
 import org.apache.xerces.impl.xs.assertion.XSAssert;
 import org.apache.xerces.impl.xs.assertion.XSAssertConstants;
@@ -99,20 +100,41 @@ public class XSDAssertionValidator {
         
         // instantiate the assertions processor
         if (assertionList != null && fAssertionProcessor == null) {
-            // construct parameter values for the assertion processor
-            NamespaceSupport xpathNamespaceContext = null;
-            if (assertionList instanceof XSObjectList) {
-                xpathNamespaceContext = ((XSAssertImpl)((XSObjectList) assertionList).item(0)).getXPath2NamespaceContext();    
-            }
-            else {
-                Vector assertVector = (Vector) assertionList;
-                xpathNamespaceContext = ((XSAssertImpl)assertVector.get(0)).getXPath2NamespaceContext();
+           constructAssertProcessor(assertionList);
+        }
+        
+        // handling, assertions on, simpleType with variety list whose itemType is union.
+        // only supporting, when all the union member types are with variety atomic.
+        int unionTypeNoOfMembers = 0;
+        int noOfUnionAtomicTypes = 0;
+        if (assertionList == null && fAssertionProcessor == null) {
+            XSTypeDefinition typeDefn = fXmlSchemaValidator.fCurrentPSVI.getTypeDefinition();
+            if (typeDefn != null && typeDefn.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
+               XSSimpleTypeDefinition xsSimpleTypeDefn = (XSSimpleTypeDefinition)typeDefn;
+               if (xsSimpleTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_LIST) {
+                   XSSimpleTypeDefinition xsItemTypeDefn = xsSimpleTypeDefn.getItemType();
+                   if (xsItemTypeDefn.getVariety() == XSSimpleTypeDefinition.VARIETY_UNION) {
+                       XSObjectList memberTypes = xsItemTypeDefn.getMemberTypes();
+                       unionTypeNoOfMembers = memberTypes.getLength(); 
+                       assertionList = new Vector();
+                       for (int idx = 0; idx < memberTypes.getLength(); idx++) {                           
+                           XSSimpleTypeDefinition memberType = (XSSimpleTypeDefinition)
+                                                                               memberTypes.get(idx);
+                           if (memberType.getVariety() == XSSimpleTypeDefinition.VARIETY_ATOMIC) {
+                              noOfUnionAtomicTypes++;
+                              XSSimpleTypeDecl xsSimpleTypeDecl = (XSSimpleTypeDecl)memberType;                              
+                              assertionList.add(xsSimpleTypeDecl);  // add the simpleType definition itself, to list                              
+                           }
+                       }
+                   }
+               }
             }
-
-            Map assertProcessorParams = new HashMap();
-            assertProcessorParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, xpathNamespaceContext);
-            // initialize the assertions processor
-            initializeAssertProcessor(assertProcessorParams);
+        }
+        
+        // instantiate the assertions processor
+        if (unionTypeNoOfMembers > 0 && unionTypeNoOfMembers == noOfUnionAtomicTypes && 
+                                           assertionList != null && fAssertionProcessor == null) {
+           constructAssertProcessor(assertionList);
         }
        
         // invoke the assertions processor method
@@ -126,6 +148,36 @@ public class XSDAssertionValidator {
         }
         
     } // handleStartElement
+
+    // construct and initialize, an assert processor
+    private void constructAssertProcessor(List assertionList) {
+        // construct parameter values for the assertion processor
+        NamespaceSupport xpathNamespaceContext = null;
+        if (assertionList instanceof XSObjectList) {
+            xpathNamespaceContext = ((XSAssertImpl)((XSObjectList) assertionList).item(0)).getXPath2NamespaceContext();    
+        }
+        else {
+            Vector assertVector = (Vector) assertionList;
+            if (assertVector.get(0) instanceof XSAssertImpl) {
+               xpathNamespaceContext = ((XSAssertImpl)assertVector.get(0)).getXPath2NamespaceContext();
+            }
+            else {
+               XSSimpleTypeDecl xsSimpleTypeDecl = (XSSimpleTypeDecl)assertVector.get(0);
+               if (xsSimpleTypeDecl.getAssertions() != null && xsSimpleTypeDecl.getAssertions().size() > 0) {
+                  xpathNamespaceContext = ((XSAssertImpl)(xsSimpleTypeDecl.getAssertions()).get(0)).
+                                                                              getXPath2NamespaceContext();
+               }
+            }
+        }
+
+        Map assertProcessorParams = new HashMap();
+        if (xpathNamespaceContext == null) {
+            xpathNamespaceContext = new NamespaceSupport();     
+        }
+        assertProcessorParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, xpathNamespaceContext);
+        // initialize the assertions processor
+        initializeAssertProcessor(assertProcessorParams);
+    } // constructAssertProcessor
     
     
     /*

Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java?rev=1899904&r1=1899903&r2=1899904&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/assertion/XSAssertionXPath2ValueImpl.java Sat Apr 16 09:53:36 2022
@@ -303,7 +303,7 @@ public class XSAssertionXPath2ValueImpl
      * recursively searches the XML schema type hierarchy navigating up the base types, to 
      * find the needed built-in type.
      */
-    private short getXercesXSDTypeCodeFor$value(XSTypeDefinition elementType) {
+    public short getXercesXSDTypeCodeFor$value(XSTypeDefinition elementType) {
 
         if (Constants.NS_XMLSCHEMA.equals(elementType.getNamespace())) {
             short typeCode = -100;  // xsd type short code initializer



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