I agree. I would expect a SAXException thrown from an ErrorHandler (in any context) to propagate up the stack. If this is getting swallowed somewhere in Xerces then it's a bug.
Michael Glavassevich XML Technologies and WAS Development IBM Toronto Lab E-mail: mrgla...@ca.ibm.com E-mail: mrgla...@apache.org Jorge Williams <jorge.willi...@rackspace.com> wrote on 25/06/2012 01:14:07 AM: > Hey Mukul, > > Yup, you pointed me in the right direction -- thanks...but I still > think there's a bug. > > If you look at the docs to ErrorHandler: > > http://docs.oracle.com/javase/6/docs/api/org/xml/sax/ErrorHandler.html > > It says that: " it is up to the application to decide whether to > throw an exception for different types of errors and warnings." > > In other words, the error handler gives an app the ability to decide > whether or not to throw an exception when an error occurs. The issue > that I was having was that I registered an error handler that threw > an exception. I couldn't replicate it from the SourceValidator > sample because it reports errors directly from the error handler and > doesn't throw an exception there at all. > > The problem that I have is that in this case: > > <a xmlns="http://www.rackspace.com/xerces/test" even="23"/> > > The SAXParseException propagated all the way up to my app as expected. > > In this case, however: > > <e xmlns="http://www.rackspace.com/xerces/test"> > <even>23</even> > </e> > > The exception never propagated up -- it got lost! I totally see > that as a bug. > > I've reworked the code to not throw an exception in the ErrorHandler > -- but I don't feel this is very efficient. I want to fail fast on > the first parse error I see and not have to wait for the entire > message to finish parsing. > > Thanks, > > -jOrGe W. > > On Jun 24, 2012, at 2:55 AM, Mukul Gandhi wrote: > > > Hi Jorge, > > I think, this error is not specific to XSD assertions. Setting a > > error handler on the JAXP validator object would solve this problem. > > > > Following are the proposed changes to solve this issue, > > > > Validator v = s.newValidator(); > > v.setErrorHandler(new ErrHandler()); > > v.validate(new StreamSource(instance)); > > > > and define a suitable error handler as following, > > > > class ErrHandler implements ErrorHandler { > > ... > > } > > > > On Fri, Jun 22, 2012 at 12:48 AM, Jorge Williams > > <jorge.willi...@rackspace.com> wrote: > >> Hey Guys, > >> > >> Can you give me a hand. I'm getting a weird error that I cannot > replicate with jaxp.SourceValidator so I know I must be doing > something wrong, but I can't tell what. > >> > >> My code looks like this: > >> > >> package com.rackspace.xerces; > >> > >> import javax.xml.validation.*; > >> import javax.xml.transform.stream.*; > >> > >> public class Test { > >> public static void main(String[] args) { > >> if (args.length != 2) { > >> System.err.println ("Usage: need XSD and instance doc"); > >> return; > >> } > >> > >> try { > >> System.setProperty ("javax.xml.validation.SchemaFactory: > http://www.w3.org/XML/XMLSchema/v1.1", > "org.apache.xerces.jaxp.validation.XMLSchema11Factory"); > >> > >> String xsd = args[0]; > >> String instance = args[1]; > >> > >> SchemaFactory factory = SchemaFactory.newInstance(" > http://www.w3.org/XML/XMLSchema/v1.1"); > >> factory.setFeature ("http://apache.org/xml/features/ > validation/cta-full-xpath-checking", true); > >> > >> Schema s = factory.newSchema(new StreamSource(xsd)); > >> s.newValidator().validate(new StreamSource(instance)); > >> > >> } catch (Exception e) { > >> e.printStackTrace(); > >> } > >> } > >> } > >> > >> > >> You pass a schema in param 1 and an instance document in param 2, > the code validates and returns errors. Here's the schema I'm using to test: > >> > >> > >> <schema > >> elementFormDefault="qualified" > >> attributeFormDefault="unqualified" > >> xmlns="http://www.w3.org/2001/XMLSchema" > >> xmlns:xsd="http://www.w3.org/2001/XMLSchema" > >> xmlns:tst="http://www.rackspace.com/xerces/test" > >> targetNamespace="http://www.rackspace.com/xerces/test"> > >> > >> <element name="e" type="tst:SampleElement"/> > >> <element name="a" type="tst:SampleAttribute"/> > >> > >> <complexType name="SampleElement"> > >> <sequence> > >> <element name="even" type="tst:EvenInt100" minOccurs="0"/> > >> </sequence> > >> </complexType> > >> > >> <complexType name="SampleAttribute"> > >> <attribute name="even" type="tst:EvenInt100" use="optional"/> > >> </complexType> > >> > >> <!-- XSD 1.1 assert --> > >> <simpleType name="EvenInt100"> > >> <restriction base="xsd:integer"> > >> <minInclusive value="0" /> > >> <maxInclusive value="100" /> > >> <assertion test="$value mod 2 = 0" /> > >> </restriction> > >> </simpleType> > >> </schema> > >> > >> > >> When I pass the following instance document, the assertion in > EvenInt100 trips and things fail as expected: > >> > >> <a xmlns="http://www.rackspace.com/xerces/test" even="23"/> > >> > >> When I pass *this* instance document however, I'd expect the same > assertion to fail, but it doesn't. > >> > >> <e xmlns="http://www.rackspace.com/xerces/test"> > >> <even>23</even> > >> </e> > >> > >> > >> The very weird bit is that jaxp.SourceValidator works > correctly on the example, so i must be doing something wrong...but I > can't tell what it is. Any ideas? > >> > >> BTW my code is on github here: > >> > >> https://github.com/RackerWilliams/xerces-tests/tree/master/schema_tests > >> > >> You should be able to do a > >> > >> mvn clean install > >> > >> Then > >> > >> java -jar target/xerces-test-1.0.0-SNAPSHOT-jar-with- > dependencies.jar test.xsd test.xml > >> > >> to illustrate the issue. > >> > >> Thanks, > >> > >> -jOrGe W. > > > > > > > > > > -- > > Regards, > > Mukul Gandhi > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org > > For additional commands, e-mail: j-users-h...@xerces.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org > For additional commands, e-mail: j-users-h...@xerces.apache.org