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

Reply via email to