JDK 1.6 and XML validation failure
Hello, everyone!
Well, I think there are some people who tried to test their code on JDK 1.6 beta...
I've discovered some problems but I don't know what's the reason of such strange effect.
Here is my small XML-validator. I've compiled one of the examples onsun.com.
import org.xml.sax.SAXException;
import org.w3c.dom.Document;
import javax.xml.validation.*;
import javax.xml.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
publicclass Main
{
publicstaticvoid main(String[] args)
{
try
{
if (args.length!=2)
{
System.out.println("Usage: [XML-file] [XSD-file]");
return;
}
long t1 = System.currentTimeMillis();
long t3 = System.currentTimeMillis();
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(args[1]));
Validator validator = schema.newValidator();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
long t2 = System.currentTimeMillis();
System.out.println("Init: "+(t2-2*t3+t1));
t1 = System.currentTimeMillis();
t3 = System.currentTimeMillis();
Document document = parser.parse(new File(args[0]));
validator.validate(new DOMSource(document));
t2 = System.currentTimeMillis();
System.out.println("Done: "+(t2-2*t3+t1));
}catch(SAXException e){
e.printStackTrace();
}catch(ParserConfigurationException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
Here is my XML file:
<birthdate>
<month>January</month>
<day>21</day>
<year>1983</year>
</birthdate>
Here is my schema:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="birthdate">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="month" type="xsd:string" />
<xsd:element name="day" type="xsd:int" />
<xsd:element name="year" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
The validation succeed on JDK 1.5.0_08 and fails with an exception on JDK 1.6.0 beta 2:
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element'birthdate'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1887)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:685)
at com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.beginNode(DOMValidatorHelper.java:273)
at com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:240)
at com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:186)
at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:100)
at javax.xml.validation.Validator.validate(Validator.java:127)
at Main.main(Main.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at ...
Could anyone explain why?

