George,
Thanks for all these good patches. I didn't get a chance to
look at them today, and I'm away on vacation until Tuesday.
I'll take a look at them when I get back. I don't want you
to think you're being ignored.
Ted
----- Original Message -----
From: "George T. Joseph" <[EMAIL PROTECTED]>
To: "xerces-dev" <[EMAIL PROTECTED]>
Sent: Thursday, January 06, 2000 11:22 PM
Subject: Changes for XSchemaValidator.java
> I spent the day (actually yesterday) trying to get Schema validation
working a bit better. A diff to
> org/apache/xerces/validators/schema/XSchemaValidator.java and a
description is appended below for anyone who wants to use it.
>
> George
> *******************************************
>
> reportSchemaError() was printing a stack trace for each validation error.
It was also eating the exceptions thrown instead of
> propagating them back up the call stack. I commented out the try/catch
block so the calling application gets the exception and can
> decide if a stack trace is appropriate. I left printStackTrace alone
where it was being called in "can't get here" situations.
>
> A few System.exit() calls were commented out. They should never be called
but I'm not fond of having them around in APIs.
>
> traverseAttributeDecl() was looking for the old 'required="true"' on an
attribute definition instead of 'minOccurs="1"' to decide if
> an attribute was required or not.
>
> The datatypes 'negative-integer', 'positive-integer',
'non-negative-integer', and 'non-positive-integer' weren't being correctly
> added to the datatype registry and were therefore unavailable.
>
> *** xschemavalidatororig.java Wed Jan 05 15:12:30 2000
> --- xschemavalidator.java Fri Jan 07 01:20:12 2000
> ***************
> *** 1683,1694 ****
> catch (SAXException se) {
> se.getException().printStackTrace();
> System.err.println("error parsing schema file");
> ! System.exit(1);
> }
> catch (Exception e) {
> e.printStackTrace();
> System.err.println("error parsing schema file");
> ! System.exit(1);
> }
> fSchemaDocument = fSchemaParser.getDocument();
> if (fSchemaDocument == null) {
> --- 1683,1694 ----
> catch (SAXException se) {
> se.getException().printStackTrace();
> System.err.println("error parsing schema file");
> ! // System.exit(1);
> }
> catch (Exception e) {
> e.printStackTrace();
> System.err.println("error parsing schema file");
> ! // System.exit(1);
> }
> fSchemaDocument = fSchemaParser.getDocument();
> if (fSchemaDocument == null) {
> ***************
> *** 1703,1709 ****
> }
> catch (Exception e) {
> e.printStackTrace(System.err);
> ! System.exit(1);
> }
> }
>
> --- 1703,1709 ----
> }
> catch (Exception e) {
> e.printStackTrace(System.err);
> ! // System.exit(1);
> }
> }
>
> ***************
> *** 2206,2212 ****
> return index;
> }
>
> ! public int traverseDatatypeDecl(Element datatypeDecl) {
> int newTypeName =
fStringPool.addSymbol(datatypeDecl.getAttribute(ATT_NAME));
> int export =
fStringPool.addSymbol(datatypeDecl.getAttribute(ATT_EXPORT));
>
> --- 2206,2212 ----
> return index;
> }
>
> ! public int traverseDatatypeDecl(Element datatypeDecl) throws Exception {
> int newTypeName =
fStringPool.addSymbol(datatypeDecl.getAttribute(ATT_NAME));
> int export =
fStringPool.addSymbol(datatypeDecl.getAttribute(ATT_EXPORT));
>
> ***************
> *** 2449,2455 ****
> // attribute default type
> int attDefaultType = -1;
> int attDefaultValue = -1;
> ! boolean required = attrDecl.getAttribute("required").equals("true");
> if (required) {
> attDefaultType = fStringPool.addSymbol("#REQUIRED");
> } else {
> --- 2449,2455 ----
> // attribute default type
> int attDefaultType = -1;
> int attDefaultValue = -1;
> ! boolean required = attrDecl.getAttribute("minOccurs").equals("1");
> if (required) {
> attDefaultType = fStringPool.addSymbol("#REQUIRED");
> } else {
> ***************
> *** 3011,3027 ****
> return -1;
> }
>
> ! private void reportSchemaError(int major, Object args[]) {
> ! try {
> fErrorReporter.reportError(fErrorReporter.getLocator(),
> SchemaMessageProvider.SCHEMA_DOMAIN,
> major,
> SchemaMessageProvider.MSG_NONE,
> args,
> XMLErrorReporter.ERRORTYPE_RECOVERABLE_ERROR);
> ! } catch (Exception e) {
> ! e.printStackTrace();
> ! }
> }
>
> //
> --- 3011,3027 ----
> return -1;
> }
>
> ! private void reportSchemaError(int major, Object args[]) throws
Exception {
> ! // try {
> fErrorReporter.reportError(fErrorReporter.getLocator(),
> SchemaMessageProvider.SCHEMA_DOMAIN,
> major,
> SchemaMessageProvider.MSG_NONE,
> args,
> XMLErrorReporter.ERRORTYPE_RECOVERABLE_ERROR);
> ! // } catch (Exception e) {
> ! // e.printStackTrace();
> ! // }
> }
>
> //
> ***************
> *** 3113,3119 ****
>
> String integerSubtypeTable[][] = {
> { "non-negative-integer", DatatypeValidator.MININCLUSIVE ,
"0"},
> ! { "postive-integer", DatatypeValidator.MININCLUSIVE, "1"},
> { "non-positive-integer", DatatypeValidator.MAXINCLUSIVE,
"0"},
> { "negative-integer", DatatypeValidator.MAXINCLUSIVE, "-1"}
> };
> --- 3113,3119 ----
>
> String integerSubtypeTable[][] = {
> { "non-negative-integer", DatatypeValidator.MININCLUSIVE ,
"0"},
> ! { "positive-integer", DatatypeValidator.MININCLUSIVE, "1"},
> { "non-positive-integer", DatatypeValidator.MAXINCLUSIVE,
"0"},
> { "negative-integer", DatatypeValidator.MAXINCLUSIVE, "-1"}
> };
> ***************
> *** 3149,3155 ****
> } catch (UnknownFacetException ufe) {
> System.out.println("Internal error initializing
registry - Unknown facet: "+integerSubtypeTable[i][0]);
> }
> ! fRegistry.put(integerSubtypeTable[0], v);
> }
> }
>
> --- 3149,3155 ----
> } catch (UnknownFacetException ufe) {
> System.out.println("Internal error initializing
registry - Unknown facet: "+integerSubtypeTable[i][0]);
> }
> ! fRegistry.put(integerSubtypeTable[i][0], v);
> }
> }
>
>
>