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