📄 validation.java
字号:
/* Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.xmlbeans.samples.validation;import org.apache.xmlbeans.*;import org.apache.xmlbeans.samples.validation.todolist.*;import org.apache.xmlbeans.samples.validation.todolist.TodolistDocument.Todolist;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;/** * 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 * <em>as you set them</em>, 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. */public class Validation{ private static XmlOptions m_validationOptions; /** * Receives a todo list XML instance, twice rendering it invalid * and validating it using the XMLBeans API. * * @param args An array in which the first item is a * path to the XML instance file. */ 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]); } /** * 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. * * @param xmlPath A path to the XML instance file. * @return <code>true if the XML is valid after changes; * otherwise, <code>false</code>. */ 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 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 * <item> in a <todolist>, then update the <item>'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. * * @param xmlPath A path to the XML instance file. * @return <code>true</code> if valid XML is successfully created; * otherwise, <code>false</code>. */ 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(); } /** * Receives the collection containing errors found during * validation and print the errors to the console. * * @param validationErrors The validation errors. */ 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"); } } /** * <p>Creates a File from the XML path provided in main arguments, then * parses the file's contents into a type generated from schema.</p> * <p/> * <p>Note that this work might have been done in main. Isolating it here * makes the code separately available from outside this class.</p> * * @param xmlFilePath A path to XML based on the schema in inventory.xsd. * @return An instance of a generated schema type that contains the parsed * XML. */ 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; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -