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]

Reply via email to