org.apache.xmlbeans.samples.validation
public class: Validation [javadoc |
source]
java.lang.Object
org.apache.xmlbeans.samples.validation.Validation
A sample to illustrate two means for validating XML against schema
using features of the XMLBeans API. The features illustrated are:
- Validating after changes by using the XmlObject.validate method.
This method is exposed by types generated by compiling schema. The
validate method validates instances against all aspects of schema.
Also, with this method you can specify a Collection instance to
capture errors that occur during validation.
- Validating "on the fly" using the XmlOptions.VALIDATE_ON_SET constant.
This option prompts XMLBeans to validate XML against simple schema types
as you set them, rather than by expressly calling for validation.
You can set this option by calling XmlOptions.setValidateOnSet, then
specifying the XmlOptions instance as a parameter when creating
a new instance from schema or parsing an existing one.
Note that it is also possible to validate instances from the
command line by using tools you'll find in the bin directory of the
XMLBeans distribution.
Methods from java.lang.Object: |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method from org.apache.xmlbeans.samples.validation.Validation Detail: |
public boolean isValidAfterChanges(String xmlPath) {
System.out.println("Validating after changes: \n");
// Set up the validation error listener.
ArrayList validationErrors = new ArrayList();
m_validationOptions = new XmlOptions();
m_validationOptions.setErrorListener(validationErrors);
TodolistDocument todoList = (TodolistDocument)parseXml(xmlPath, null);
// Schema defines the < name > element as required (minOccurs = '1').
// So this statement renders the XML invalid because it sets the
// < name > element to nil.
todoList.getTodolist().getItemArray(0).setName(null);
// During validation, errors are added to the ArrayList for
// retrieval and printing by the printErrors method.
boolean isValid = todoList.validate(m_validationOptions);
if (!isValid)
{
printErrors(validationErrors);
}
return isValid;
}
Illustrates use of the validate method by making changes to incoming
XML that invalidate the XML, then validating the instance and
printing resulting error messages.
Because this code is designed to generate invalid XML, it
returns false when successful. |
public boolean isValidOnTheFly(String xmlPath) {
System.out.println("Validating on-the-fly: \n");
m_validationOptions = new XmlOptions();
m_validationOptions.setValidateOnSet();
TodolistDocument todoList = (TodolistDocument)parseXml(xmlPath, m_validationOptions);
Todolist list = todoList.getTodolist();
ItemType firstItem = list.getItemArray(0);
// Schema defines the < id > element as allowing values up to 100. So
// this line throws an exception because it invalidates the XML the
// code is updating.
firstItem.setId(8587);
// This line will not be reached.
return todoList.validate();
}
Illustrates the "validate on set" feature, which validates XML
for simple types on the fly. As XML for those types is "set" through
accessors generated by compiling schema, XMLBeans checks the XML's
validity. The code here uses generated types to retrieve the first
- in a , then update the
- 's id attribute. The code
throws an exception when it tries to set an id attribute value that
is too high.
Because this code is designed to generate invalid XML, it
returns false when successful.
|
public static void main(String[] args) {
Validation thisSample = new Validation();
// Use the validate method to validate an instance after
// updates.
boolean isValidAfterChanges = thisSample.isValidAfterChanges(args[0]);
// Use the VALIDATE_ON_SET option to validate an instance
// as updates are made.
boolean isValidOnTheFly = thisSample.isValidOnTheFly(args[0]);
}
Receives a todo list XML instance, twice rendering it invalid
and validating it using the XMLBeans API. |
public XmlObject parseXml(String xmlFilePath,
XmlOptions validationOptions) {
File xmlFile = new File(xmlFilePath);
XmlObject xml = null;
try
{
xml = XmlObject.Factory.parse(xmlFile, validationOptions);
} catch (XmlException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return xml;
}
Creates a File from the XML path provided in main arguments, then
parses the file's contents into a type generated from schema.
Note that this work might have been done in main. Isolating it here
makes the code separately available from outside this class.
|
public void printErrors(ArrayList validationErrors) {
System.out.println("Errors discovered during validation: \n");
Iterator iter = validationErrors.iterator();
while (iter.hasNext())
{
System.out.println(" > > " + iter.next() + "\n");
}
}
Receives the collection containing errors found during
validation and print the errors to the console. |