Hmm... I may have mistyped :-). I was asking if the length facet required that the length of the _string_ be equal to the facet value (which is verified by your statement below). The patch doesn't make any of the facets required..
Kito D. Mann Virtua Communications Corp [EMAIL PROTECTED] Friday February 25, 2000 09:36 PM Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc: (bcc: Kito Mann/PSG/Prudential) Subject: Re: [PATCH] StringValidator No it is not required. From XML Schema Part 2: Datatypes, I quote: "A Constraining facet is an optional property that can be applied to a datatype to constrain its value space. " length is a Constraining facet. If you declare length facet then you can constraint or derive a SimpleType which has fixed string length. I will be updating all datatypes within the next few days, as well as providing the pattern support to support the latest 02/25 draft. Thanks, Jeffrey Rodriguez IBM Cupertino XML Development >From: [EMAIL PROTECTED] >Reply-To: [EMAIL PROTECTED] >To: [EMAIL PROTECTED] >Subject: [PATCH] StringValidator >Date: Fri, 25 Feb 2000 18:30:11 -0500 > >I made a couple of bug fixes and enhancements for the StringValidator >(comments below). Even though it's not 100% clear in the >spec, I assumed that the "length" facet means that the length is >_required_. Please let me know if I submitted this incorrectly, >or if I should refrain from the verbose comments in the header... > >--- original_src\org\apache\xerces\validators\datatype\StringValidator.java >Tue Feb 22 14:54:34 2000 >+++ src\org\apache\xerces\validators\datatype\StringValidator.java Fri >Feb 25 18:01:46 2000 >@@ -68,6 +68,13 @@ > * StringValidator validates that XML content is a W3C string type. > * > * @author Ted Leung >+ * @author Kito D. Mann, Virtua Communications Corp. >+ * - 2/25/00 >+ * - changed setFacets() to use the error framework when throwing an >IllegalFacetException >+ * - added validation for MinLength, MaxLength, and Length >+ * - fixed problem with setFacets() using facetData before it was >initialized >+ * (this caused setFacets() to fail unconditionally) >+ * - added check to prevent use of length and maxlength or minlength >facets at the same time > * @version > */ > >@@ -78,6 +85,11 @@ > StringValidator fBaseValidator = null; > int fMaxLength = 0; > boolean fIsMaxLength = false; >+ int fMinLength = 0; >+ boolean fIsMinLength = false; >+ int fLength = 0; >+ boolean fIsLength = false; >+ private DatatypeMessageProvider fMessageProvider = new >DatatypeMessageProvider(); > > /** > * validate that a string is a W3C string type >@@ -108,6 +120,14 @@ > if (fIsMaxLength && content.length() > fMaxLength) > throw new InvalidDatatypeValueException("Value >'"+content+"' with length '"+content.length()+"' exceeds maximum length of >"+fMaxLength+"."); > } >+ else if (key.equals(DatatypeValidator.MINLENGTH)) { >+ if (fIsMinLength && content.length() < fMinLength) >+ throw new InvalidDatatypeValueException("Value >'"+content+"' with length '"+content.length()+"' is less than the minimum >length of "+fMinLength+"."); >+ } >+ else if (key.equals(DatatypeValidator.LENGTH)) { >+ if (fIsLength && content.length() != fLength) >+ throw new InvalidDatatypeValueException("Value >'"+content+"' with length '"+content.length()+"' is not equal to required >length of "+fLength+"."); >+ } > } > } > >@@ -115,33 +135,62 @@ > } > > public void setFacets(Hashtable facets) throws UnknownFacetException, >IllegalFacetException, IllegalFacetValueException { >- facetData = new Hashtable(); // reset old facets >+ > for (Enumeration e = facets.keys(); e.hasMoreElements();) { > String key = (String) e.nextElement(); >- if (key.equals(DatatypeValidator.LENGTH)) { >- } else if (key.equals(DatatypeValidator.MINLENGTH)) { >- } else if (key.equals(DatatypeValidator.MAXLENGTH)) { >- int vvv; >- String value = (String)facetData.get(key); >- try { >+ if (key.equals(DatatypeValidator.LENGTH) || >+ key.equals(DatatypeValidator.MINLENGTH) || >+ key.equals(DatatypeValidator.MAXLENGTH)) { > >+ int vvv; >+ String value = (String)facets.get(key); >+ try { > vvv = Integer.parseInt(value); >- } catch(NumberFormatException nfe) { >- throw new IllegalFacetValueException("maxLength value >'"+value+"' is invalid."); >+ if (vvv < 0) throw new NumberFormatException(); >+ } catch(NumberFormatException nfe) { >+ if (value == null) >+ value = "'null'"; >+ throw new IllegalFacetValueException( >+ >getErrorString(DatatypeMessageProvider.IllegalFacetValue, >+ DatatypeMessageProvider.MSG_NONE, >+ new Object [] { value, key } > )); >+ } >+ >+ if (key.equals(DatatypeValidator.LENGTH)) >+ { >+ if (fIsMaxLength || fIsMinLength) >+ throw new IllegalFacetException("Length facet is not >allowed when maxLength or minLength has been defined."); >+ fLength = vvv; >+ fIsLength = true; > } >- fMaxLength = vvv; >- fIsMaxLength = true; >- } else if (key.equals(DatatypeValidator.MAXINCLUSIVE)) { >+ else >+ if (key.equals(DatatypeValidator.MINLENGTH)) >+ { >+ if (fIsLength) >+ throw new IllegalFacetException("MinLength facet is >not allowed when length has been defined."); > >+ fMinLength = vvv; >+ fIsMinLength = true; >+ } >+ else >+ if (key.equals(DatatypeValidator.MAXLENGTH)) >+ { >+ if (fIsLength) >+ throw new IllegalFacetException("MaxLength facet is >not allowed when length has been defined."); >+ fMaxLength = vvv; >+ fIsMaxLength = true; >+ } >+ } >+ else if (key.equals(DatatypeValidator.MAXINCLUSIVE)) { > } else if (key.equals(DatatypeValidator.MAXEXCLUSIVE)) { > } else if (key.equals(DatatypeValidator.MININCLUSIVE)) { > } else if (key.equals(DatatypeValidator.MINEXCLUSIVE)) { > } else if (key.equals(DatatypeValidator.PATTERN)) { > } else if (key.equals(DatatypeValidator.ENUMERATION)) { >- facetData.put(key,facets.get(key)); > } else { >- throw new IllegalFacetException(); >+ throw new IllegalFacetException("Invalid facet (" + key + >")"); > } > } >- } >+ facetData = facets; >+ } > > public void setFacets(int facets[]) throws UnknownFacetException, >IllegalFacetException, IllegalFacetValueException { > } >@@ -156,4 +205,12 @@ > public void setLocale(Locale locale) { > fLocale = locale; > } >+ >+ private String getErrorString(int major, int minor, Object args[]) { >+ try { >+ return fMessageProvider.createMessage(fLocale, major, minor, >args); >+ } catch (Exception e) { >+ return "Illegal Errorcode "+minor; >+ } >+ } > } > >Kito D. Mann >Virtua Communications Corp. > > > ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com