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