Many times user inputs are taken through XML. As users are free to enter any thing in the file, checking the correctness of the XML is very crucial. XML Schema and DTD help us do this.
I had come across a situation where I had to take inputs from a XML where certain attribute of an element should be unique across the XML. Here is a sample.
If you use JAXB, with default settings, to unmarshal this, it will not throw any exception. To unmarshal with schema validation you have to set the schema explicitly like below.
Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setSchema(SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema( new File("src/main/resources/gok.xsd")));
Then you will get an exception like below.
Caused by: org.xml.sax.SAXParseException: Duplicate unique value [1]
declared for identity constraint of element "College".
Advantage of doing this strict validation through JAXB is, all the validations are taken care by JAXB. You simply unmarshal and start working with your data. If the unmarshal fails you know user has done a mistake, simply throw an error and enjoy ...