`

apache的xmlbeans项目中自带demo(名称为Validation)的一个小错误

阅读更多
这个例子中包含几个文件,分别是todolist.xsd,todolist.xml,Validation.java,ValidationTest.java

下面分别复制其代码:
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;
    }
}

ValidationTest.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.samples.validation.Validation;

/**
* A class with which to test the Validation sample.
*/
public class ValidationTest
{
    /**
     * Tests the Validation sample.
     */
    public static void main(String[] args)
    {
        // all we're checking for is that the sample doesn't throw anything.
        // a real sample test might assert something more interesting.
        Validation sample = new Validation();
        // Use the validate method to validate an instance after
        // updates.
        boolean isValidAfterChanges = sample.isValidAfterChanges(args[0]);
        assert !isValidAfterChanges;
       
        // Use the VALIDATE_ON_SET option to validate an instance
        // as updates are made.
        boolean isValidOnTheFly = sample.isValidOnTheFly(args[0]);       
        assert !isValidOnTheFly;
    }
}


todolist.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<todolist xmlns="http://xmlbeans.apache.org/samples/validation/todolist">
    <item id="001">
      <name>Buy a south Pacific island.</name>
      <description>Contingent on inheriting lots of money.</description>
      <due_by>2005-05-01T23:36:28</due_by>
      <action>someday_maybe_defer</action>
    </item>
    <item id="002">
      <name>Get that new PowerBook I've been eyeing.</name>
      <description>Resulting productivity increase will be exponential!</description>
      <due_by>2005-05-01T23:36:28</due_by>
      <action>do</action>
    </item>
    <item id="003">
      <name>Clean the garage.</name>
      <description>Remove at least enough junk so that my bicycle fits.</description>
      <due_by>2005-05-30T23:36:28</due_by>
      <action>delegate</action>
    </item>
</todolist>

todolist.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<xs:schema targetNamespace="http://xmlbeans.apache.org/samples/validation/todolist" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://xmlbeans.apache.org/samples/validation/todolist" elementFormDefault="qualified">
<xs:element name="todolist">
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="itemType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="itemType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="due_by" type="xs:dateTime" minOccurs="0"/>
<xs:element name="action" type="actionType"/>
</xs:sequence>
<xs:attribute name="id" type="idType"/>
</xs:complexType>
<xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="idType">
<xs:restriction base="xs:int">
<xs:maxExclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="actionType">
<xs:restriction base="xs:string">
<xs:enumeration value="do"/>
<xs:enumeration value="delegate"/>
<xs:enumeration value="someday_maybe_defer"/>
<xs:enumeration value="toss"/>
<xs:enumeration value="incubate"/>
<xs:enumeration value="file"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

其中错误的地方在todolist.xsd,红色标记处(xs:string),这个错误导致
          <xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
无效。应该将其改为:nameType
分享到:
评论

相关推荐

    org.apache.xmlbeans jar包

    在Java开发中操作Excel时,XMLBeans提供了一个名为`org.apache.xmlbeans.impl.spreadsheet`的包,其中包含了一系列类,如`Sheet`, `Workbook`, 和 `Cell`等,它们对应于Excel文件中的工作表、工作簿和单元格。...

    xmlbeans-bin-4.0.0-20201016.zip

    2. **Schema编译器**:XMLBeans提供了一个名为`scomp`的命令行工具,用于将XML Schema(XSD)文件转换为Java源代码。这些生成的Java类封装了XML结构,提供了对XML文档的强类型访问。 3. **Java API**:XMLBeans的...

    xmlbeans-3.1.0-API文档-中文版.zip

    赠送jar包:xmlbeans-3.1.0.jar; 赠送原API文档:xmlbeans-3.1.0-javadoc.jar; 赠送源代码:xmlbeans-3.1.0-sources.jar; 赠送Maven依赖信息文件:xmlbeans-3.1.0.pom; 包含翻译后的API文档:xmlbeans-3.1.0-...

    xmlbeans-2.3.0.jar

    XMLBeans 是 Apache 软件基金会的一个开源项目,它提供了一种将 XML 数据与 Java 类进行绑定的方法。在处理 XML 文档时,XMLBeans 提供了一种高效的、类型安全的接口,使得开发者能够以对象的形式操作 XML 内容。...

    xmlbeans的jar包

    XMLBeans是Apache软件基金会开发的一个Java库,它提供了一种方式来处理XML文档,通过将XML Schema转换为Java类,使开发者能够以面向对象的方式与XML数据进行交互。这个库包含多个组件,如`jsr173_1.0_api.jar`、`...

    xmlbeans demo

    XMLBeans是Apache软件基金会开发的一个Java库,它允许开发者通过XML Schema(XSD)来处理XML数据。XML Schema是一种用于定义XML文档结构和数据类型的语言,而XMLBeans则是将这些XML Schema转换为Java类,使得Java...

    xmlbeans-3.1.0.jar

    xmlbeans-3.1.0.jar包 XMLBeans是一种工具,可让您以Java友好的方式访问XML 的全部功能。 解决 java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException异常

    xmlbeans2.6.0

    XMLBeans是Apache软件基金会开发的一个Java库,它允许程序员通过Java API来操作XML文档。在标题"xmlbeans2.6.0"中提到的是XMLBeans的特定版本2.6.0,这通常意味着包含了该版本的所有功能和修复的已知问题。 在描述...

    xmlbeans-5.0.3-API文档-中文版.zip

    赠送jar包:xmlbeans-5.0.3.jar; 赠送原API文档:xmlbeans-5.0.3-javadoc.jar; 赠送源代码:xmlbeans-5.0.3-sources.jar; 赠送Maven依赖信息文件:xmlbeans-5.0.3.pom; 包含翻译后的API文档:xmlbeans-5.0.3-...

    xmlbeans-2.6.0.jar即xmlbeans-2.3.0.jar资源

    XMLBeans是Apache软件基金会开发的一个Java库,它允许开发者通过Java API来操作XML文档。XMLBeans的核心理念是将XML Schema转换为Java类,这样就可以直接在Java程序中以对象的形式处理XML数据,无需手动解析XML字符...

    org.apache.servicemix.bundles.xmlbeans-2.4.0_1.jar

    org.apache.servicemix.bundles.xmlbeans-2.4.0_1.jar

    xmlbeans-2.5.0.jar

    "xmlbeans-2.5.0.jar"是XMLBeans库的一个特定版本,用于解决Java运行时错误`java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException`。这个错误通常表示在运行时找不到特定的类,这可能是由于缺少依赖或...

    xmlbeans-2.6.0.jar

    XMLBeans是一种工具,可让您以Java友好的方式访问XML 的全部功能。 解决 java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException异常

    xmlbeans-3.1.0-API文档-中英对照版.zip

    赠送jar包:xmlbeans-3.1.0.jar; 赠送原API文档:xmlbeans-3.1.0-javadoc.jar; 赠送源代码:xmlbeans-3.1.0-sources.jar; 赠送Maven依赖信息文件:xmlbeans-3.1.0.pom; 包含翻译后的API文档:xmlbeans-3.1.0-...

    com.springsource.org.apache.xmlbeans-2.4.0.jar

    jar包,官方版本,自测可用

    xmlbeans-3.1.0.rar

    xmlbeans-3.1.0.rar是一个工具类,主要作用是把xml文件转换成jar包,方便使用。解压出来以后,到jar目录,里面有对应的bat文件,只需要把对应的配置改成自己需要生成的xml文件,xsd文件即可

    xmlbeans-bin-3.1.0.tgz

    XMLBeans是Apache软件基金会开发的一款Java库,它允许开发者直接在Java对象和XML文档之间进行交互。这个压缩包“xmlbeans-bin-3.1.0.tgz”包含了XMLBeans库的3.1.0版本,提供了Java应用程序处理XML数据的强大工具。 ...

    xmlbeans 2.3.0

    XMLBeans 2.3.0是该库的一个版本,提供了对XML Schema的全面支持,使开发人员能够直接与符合XML Schema标准的XML文档进行交互。 XMLBeans的核心功能在于其基于Schema的编译过程。当使用XMLBeans时,首先需要为XML ...

    xmlbeans-2.6.0

    XMLBeans是Apache软件基金会开发的一款Java库,它允许开发者直接在Java对象和XML文档之间进行交互。这个"xmlbeans-2.6.0"版本包含了XMLBeans库的2.6.0更新,提供了对XML Schema的高效且类型安全的访问方式。 ...

    xmlbeans2.6.0.jar.zip

    XMLBeans是Apache软件基金会开发的一个Java库,它允许开发者通过Java API来操作XML文档,将XML数据绑定到Java对象上,实现XML与Java对象之间的直接交互。XMLBeans 2.6.0是这个库的一个特定版本,包含了一系列的类和...

Global site tag (gtag.js) - Google Analytics