You're right. Only one error message is reported. It's been a very long
time (years) since I've looked at identity constraints in Xerces. Couldn't
tell you why it was implemented that way but that seems to be the
behaviour. It isn't wrong. Xerces would be producing the correct PSVI (i.e.
same error code applies for all the keyref errors). It's just less helpful
for troubleshooting.

Thanks.

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: mrgla...@ca.ibm.com
E-mail: mrgla...@apache.org

guillaume.desh...@gmail.com wrote on 05/21/2010 12:48:15 PM:

> Hi
>
> Yes that's what I did, though it's not directly the class Validator
> class that's directly involved. I used a SAXParser on which I set a
> custom DefaultHandler, like this :
>
>             SAXParserFactory spf = SAXParserFactory.newInstance();
>             spf.setNamespaceAware(true);
>             spf.setValidating(true);
>             SAXParser sp = spf.newSAXParser();
>             sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
>             sp.setProperty(JAXP_SCHEMA_SOURCE, "file:" + xsdUri);
>             sp.parse(xml, new MessageContentHandler(type));
>
> Note : I've checked in the code of SaxParser ( http://kickjava.com/
> src/javax/xml/parsers/SAXParser.java.htm ) and it affects the
> HandlerBase as the ErrorHandler.
> Here is my custom class MessageContentHandler (part of it) :
>
>     private class MessageContentHandler extends DefaultHandler {
>         private String type;
>
>         private int niveau = 0;
>         private int numBalise = 0;
>
>
>         public MessageContentHandler(String type) {
>             super();
>             this.type = type;
>         }
>
>         public void warning(SAXParseException exception) throws
SAXException {
>             creerAlerte(exception.getLocalizedMessage(), type,
> getNumBalise());
>         }
>
>         public void fatalError(SAXParseException exception) throws
> SAXException {
>             creerAlerte(exception.getLocalizedMessage(), type,
> getNumBalise());
>         }
>
>         public void error(SAXParseException exception) throws
SAXException {
>             creerAlerte(exception.getLocalizedMessage(), type,
> getNumBalise());
>         }
>
> (snip)
>
> Please note that the method "creerAlerte" doesn't throw any
> exception, it just registers the messages.
>
> Hoping that you have any hint...
>
> Regards,
> Guillaume

> 2010/5/21 Michael Glavassevich <mrgla...@ca.ibm.com>
> Hi Guillaume,
>
> Which API are you using and did you register an error handler?
>
> The default error handler for a JAXP Validator is defined as:
>
>  class DraconianErrorHandler implements ErrorHandler {
>      public void fatalError( SAXParseException e ) throws SAXException {
>          throw e;
>      }
>      public void error( SAXParseException e ) throws SAXException {
>          throw e;
>      }
>      public void warning( SAXParseException e ) throws SAXException {
>          // noop
>      }
>  }
>
> If you're using this API and didn't supply your own error handler,
> the validator will always stop on the first error.
>
> Thanks.
>
> [1] http://xerces.apache.org/xerces2-j/javadocs/api/javax/xml/
> validation/Validator.html#setErrorHandler(org.xml.sax.ErrorHandler)
>
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: mrgla...@ca.ibm.com
> E-mail: mrgla...@apache.org
>
> guillaume.desh...@gmail.com wrote on 05/21/2010 05:13:25 AM:

Reply via email to