Author: mukulg
Date: Sun Jan 6 06:19:26 2013
New Revision: 1429469
URL: http://svn.apache.org/viewvc?rev=1429469&view=rev
Log:
schema 1.1 commit: committing a minor improvement to assertions implementation.
this handles better the case, when assertions are within a simpleType->union
scenario (particularly, when a memberType of union in non XSD namespace having
non-assertion facets can validate successfully an XML instance value).
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java?rev=1429469&r1=1429468&r2=1429469&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathXPath2Impl.java
Sun Jan 6 06:19:26 2013
@@ -618,65 +618,58 @@ public class XMLAssertPsychopathXPath2Im
private boolean isValidationFailedForSTUnion(XSObjectList memberTypes,
QName element, String value, Augmentations augs) {
boolean isValidationFailedForUnion = true;
- final int memberTypesLength = memberTypes.getLength();
- int memberTypesHavingAsserts = 0;
-
- for (int memberTypeIdx = 0; memberTypeIdx < memberTypesLength;
memberTypeIdx++) {
+
+ for (int memberTypeIdx = 0; memberTypeIdx < memberTypes.getLength();
memberTypeIdx++) {
XSSimpleTypeDefinition memType = (XSSimpleTypeDefinition)
memberTypes.item(memberTypeIdx);
- // check for assertions on types in an non-schema namespace
- if
(!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace()) &&
XS11TypeHelper.simpleTypeHasAsserts(memType)) {
- memberTypesHavingAsserts++;
- XSObjectList memberTypeFacets = memType.getMultiValueFacets();
- final int memberTypeFacetsLength =
memberTypeFacets.getLength();
- for (int memberTypeFacetIdx = 0; memberTypeFacetIdx <
memberTypeFacetsLength; memberTypeFacetIdx++) {
- XSMultiValueFacet facet = (XSMultiValueFacet)
memberTypeFacets.item(memberTypeFacetIdx);
- if (facet.getFacetKind() ==
XSSimpleTypeDefinition.FACET_ASSERT) {
- Vector assertFacets = facet.getAsserts();
- int assertsSucceeded = 0;
- for (Iterator iter = assertFacets.iterator();
iter.hasNext(); ) {
- XSAssertImpl assertImpl = (XSAssertImpl)
iter.next();
- try {
- setXDMTypedValueOf$value(fCurrentAssertDomNode,
value, memType, null, false, fXpath2DynamicContext);
- AssertionError assertError =
evaluateOneAssertion(element, assertImpl, value, false, false);
- if (assertError == null) {
- assertsSucceeded++;
- }
- }
- catch(Exception ex) {
- // An exception may occur if for example a
typed value cannot be constructed by PsychoPath
- // XPath engine for a given "string value" (say
a value '5' was attempted to be converted to a typed
- // value xs:date).
- // it's useful to report warning ... REVISIT
- }
- }
- if (assertsSucceeded == assertFacets.size()) {
- // all assertions on a 'union' member type have
evaluated to 'true', therefore validation with
- // union has succeeded wrt assertions.
- // update memberType PSVI property
- ItemPSVI elemPSVI =
(ItemPSVI)augs.getItem(Constants.ELEMENT_PSVI);
- ItemPSVI attrPSVI =
(ItemPSVI)augs.getItem(Constants.ATTRIBUTE_PSVI);
- if (elemPSVI != null) {
- ((ElementPSVImpl) elemPSVI).fValue.memberType =
(XSSimpleType) memType;
+ if
(!SchemaSymbols.URI_SCHEMAFORSCHEMA.equals(memType.getNamespace())) {
+ // only look for member types in non XSD namespace
+ if (!XS11TypeHelper.simpleTypeHasAsserts(memType) &&
XS11TypeHelper.isStrValueValidForASimpleType(value, (XSSimpleType)memType,
Constants.SCHEMA_VERSION_1_1)) {
+ isValidationFailedForUnion = false;
+ break;
+ }
+ else {
+ XSObjectList memberTypeFacets =
memType.getMultiValueFacets();
+ for (int memberTypeFacetIdx = 0; memberTypeFacetIdx <
memberTypeFacets.getLength(); memberTypeFacetIdx++) {
+ XSMultiValueFacet facet = (XSMultiValueFacet)
memberTypeFacets.item(memberTypeFacetIdx);
+ if (facet.getFacetKind() ==
XSSimpleTypeDefinition.FACET_ASSERT) {
+ Vector assertFacets = facet.getAsserts();
+ int assertsSucceeded = 0;
+ for (Iterator iter = assertFacets.iterator();
iter.hasNext(); ) {
+ XSAssertImpl assertImpl = (XSAssertImpl)
iter.next();
+ try {
+
setXDMTypedValueOf$value(fCurrentAssertDomNode, value, memType, null, false,
fXpath2DynamicContext);
+ AssertionError assertError =
evaluateOneAssertion(element, assertImpl, value, false, false);
+ if (assertError == null) {
+ assertsSucceeded++;
+ }
+ }
+ catch(Exception ex) {
+ // do nothing for now. REVISIT...
+ }
}
- else {
- ((AttributePSVImpl)
attrPSVI).fValue.memberType = (XSSimpleType) memType;
+ if (assertsSucceeded == assertFacets.size()) {
+ // all assertions on a 'union' member type
have evaluated to 'true', therefore validation with union has succeeded wrt
assertions.
+ // update memberType PSVI property
+ ItemPSVI elemPSVI =
(ItemPSVI)augs.getItem(Constants.ELEMENT_PSVI);
+ ItemPSVI attrPSVI =
(ItemPSVI)augs.getItem(Constants.ATTRIBUTE_PSVI);
+ if (elemPSVI != null) {
+ ((ElementPSVImpl)
elemPSVI).fValue.memberType = (XSSimpleType) memType;
+ }
+ else {
+ ((AttributePSVImpl)
attrPSVI).fValue.memberType = (XSSimpleType) memType;
+ }
+ isValidationFailedForUnion = false;
+ break;
}
- isValidationFailedForUnion = false;
- break;
}
}
- }
- if (!isValidationFailedForUnion) {
- break;
+ if (!isValidationFailedForUnion) {
+ break;
+ }
}
}
}
-
- if (memberTypesHavingAsserts == 0) {
- // none of the member types have asserts. therefore, validation
cannot fail due to checks from this method.
- isValidationFailedForUnion = false;
- }
-
+
return isValidationFailedForUnion;
} // isValidationFailedForSTUnion
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]