| package net.zj.xmlbeans.validation; | 
 | 
| import java.io.File; | 
| import java.io.IOException; | 
| import java.util.ArrayList; | 
| import java.util.Iterator; | 
| import org.apache.xmlbeans.XmlException; | 
| import org.apache.xmlbeans.XmlObject; | 
| import org.apache.xmlbeans.XmlOptions; | 
| import org.apache.xmlbeans.samples.validation.todolist.ItemType; | 
| import org.apache.xmlbeans.samples.validation.todolist.TodolistDocument; | 
| import org.apache.xmlbeans.samples.validation.todolist.TodolistDocument.Todolist; | 
 | 
| public class Validation { | 
|     private static XmlOptions m_validationOptions; | 
 | 
|     public boolean isValidAfterChanges(String xmlPath) { | 
|         System.out.println("Validating after changes:"); | 
|         // Set up the validation error listener. | 
|         ArrayList<String> validationErrors = new ArrayList<String>(); | 
|         m_validationOptions = new XmlOptions(); | 
|         m_validationOptions.setErrorListener(validationErrors); | 
 | 
|         TodolistDocument todoList = (TodolistDocument) parseXml(xmlPath, null); | 
 | 
|         // Schema defines the <name> element as required (minOccurs = '1'). | 
|         // Add an error. | 
|         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; | 
|     } | 
 | 
|     public boolean isValidOnTheFly(String xmlPath) { | 
|         System.out.println("Validating on-the-fly:"); | 
|         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. | 
|         // Add an error. | 
|         firstItem.setId(8587); | 
 | 
|         // This line will not be reached. | 
|         return todoList.validate(); | 
|     } | 
 | 
|     public void printErrors(ArrayList<String> validationErrors) { | 
|         System.out.println("Errors discovered during validation:"); | 
|         Iterator<String> iter = validationErrors.iterator(); | 
|         while (iter.hasNext()) { | 
            System.out.println(">> " + iter.next() + " 
"); | 
|         } | 
|     } | 
 | 
|     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; | 
|     } | 
|      | 
|     public static void main(String[] args) { | 
|         Validation thisSample = new Validation(); | 
|         String xmlPath = "docs/todolist.xml"; | 
 | 
|         // Use the validate method to validate an instance after | 
|         // updates. | 
|         thisSample.isValidAfterChanges(xmlPath); | 
 | 
|         // Use the VALIDATE_ON_SET option to validate an instance | 
|         // as updates are made. | 
|         thisSample.isValidOnTheFly(xmlPath); | 
|     } | 
| } |