sandygao 2002/10/31 15:25:00 Modified: java/src/org/apache/xerces/impl/dv/xs XSSimpleTypeDecl.java Log: Bug: we also need to check the pattern facet for list and union types. Performance: whitespaces are not allowed to appear in ID/IDREF/ENTITY types, so we don't need to perform full normalization on values of these types. Revision Changes Path 1.21 +22 -32 xml-xerces/java/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java Index: XSSimpleTypeDecl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- XSSimpleTypeDecl.java 25 Oct 2002 19:51:30 -0000 1.20 +++ XSSimpleTypeDecl.java 31 Oct 2002 23:25:00 -0000 1.21 @@ -161,9 +161,9 @@ NORMALIZE_TRIM, //AnyURIDV(), NORMALIZE_TRIM, //QNameDV(), NORMALIZE_TRIM, //QNameDV(), // notation - NORMALIZE_FULL, //IDDV(), - NORMALIZE_FULL, //IDREFDV(), - NORMALIZE_FULL, //EntityDV(), + NORMALIZE_TRIM, //IDDV(), + NORMALIZE_TRIM, //IDREFDV(), + NORMALIZE_TRIM, //EntityDV(), NORMALIZE_FULL, //ListDV(), NORMALIZE_NONE, //UnionDV() }; @@ -1468,17 +1468,25 @@ //we can still return object for internal use. private Object getActualValue(Object content, ValidationContext context, ValidatedInfo validatedInfo) throws InvalidDatatypeValueException{ - if (fVariety == VARIETY_ATOMIC) { + String nvalue; + if (context==null ||context.needToNormalize()) { + nvalue = normalize(content, fWhiteSpace); + } else { + nvalue = content.toString(); + } - String nvalue; - if (context==null ||context.needToNormalize()) { - nvalue = normalize(content, fWhiteSpace); - } else { - nvalue = content.toString(); + if ( (fFacetsDefined & FACET_PATTERN ) != 0 ) { + RegularExpression regex; + for (int idx = fPattern.size()-1; idx >= 0; idx--) { + regex = (RegularExpression)fPattern.elementAt(idx); + if (!regex.matches(nvalue)){ + throw new InvalidDatatypeValueException("cvc-pattern-valid", + new Object[]{content, regex}); + } } + } - // update normalized value - validatedInfo.normalizedValue = nvalue; + if (fVariety == VARIETY_ATOMIC) { // validate special kinds of token, in place of old pattern matching if (fPatternType != SPECIAL_PATTERN_NONE) { @@ -1508,33 +1516,15 @@ } } - if ( (fFacetsDefined & FACET_PATTERN ) != 0 ) { - RegularExpression regex; - for (int idx = fPattern.size()-1; idx >= 0; idx--) { - regex = (RegularExpression)fPattern.elementAt(idx); - if (!regex.matches(nvalue)){ - throw new InvalidDatatypeValueException("cvc-pattern-valid", - new Object[]{content, regex}); - } - } - } - + validatedInfo.normalizedValue = nvalue; Object avalue = fDVs[fValidationDV].getActualValue(nvalue, context); - validatedInfo.actualValue = avalue; return avalue; } else if (fVariety == VARIETY_LIST) { - String nvalue; - if (context==null ||context.needToNormalize()) { - nvalue = normalize(content, fWhiteSpace); - } else { - nvalue = content.toString(); - } - - StringTokenizer parsedList = new StringTokenizer(nvalue); + StringTokenizer parsedList = new StringTokenizer(nvalue, " "); int countOfTokens = parsedList.countTokens() ; Object[] avalue = new Object[countOfTokens]; XSSimpleTypeDecl[] memberTypes = new XSSimpleTypeDecl[countOfTokens];
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]