`

JAXB(三)xsd 验证

 
阅读更多

现在只有最简单的关联映射验证

关键点:jaxbMarshaller.setSchema( sch );

还不会验证集合类型:List,Set,Map,以后再把JAXB(二)的例子加上,

 

 

/**
 * @author timeriver.wang
 * @date 2014-03-06 0:57:01 AM
 */
@XmlRootElement
public class Address {
    private String area;
    
    private String street;
    
    @XmlElement(name = "area")
    public String getArea() {
        return area;
    }

    public void setArea( String area ) {
        this.area = area;
    }

    @XmlElement(name = "street")
    public String getStreet() {
        return street;
    }
 
    public void setStreet(String street) {
        this.street = street;
    }
 
}

 

 

/**
 * @author timeriver.wang
 * @date 2014-03-06 0:57:32 AM
 */
// @XmlRootElement(namespace ="NAMESPACE" )
@XmlRootElement
@XmlType(propOrder = {"name","mobile","address"})
public class Teacher {

    private String name;
    
    private String mobile;
    
    private Address address;

    @XmlElement(name = "name")
    public String getName() {
        return name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    @XmlElement(name = "mobile")
    public String getMobile() {
        return mobile;
    }

    public void setMobile( String mobile ) {
        this.mobile = mobile;
    }

    @XmlElement(name = "address")
    public Address getAddress() {
        return address;
    }

    public void setAddress( Address address ) {
        this.address = address;
    }


}

  teacher.xsd

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- ************* -->
  <!-- Shared Types -->
  <!-- ************* -->

  <xs:simpleType name="string_phone">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9\-]{11,12}" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="string_not_empty">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"></xs:minLength>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="address">
    <xs:all>
      <xs:element minOccurs="0" name="area" type="string_not_empty" />
      <xs:element minOccurs="1" name="street" type="string_not_empty" />
    </xs:all>
  </xs:complexType>

  <xs:element name="teacher">
    <xs:complexType>
      <xs:all>
        <xs:element name="name" type="xs:string" minOccurs="1" />
        <xs:element name="mobile" type="string_phone" minOccurs="0" />
        <xs:element name="address" type="address" minOccurs="1" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

 

/**
 * @author timeriver.wang
 * @date 2014-03-06 0:58:56 AM
 */
public class Test {
    private static String filePath = "D:/teacher.xml";
    private static SchemaFactory schFactory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
    private static Schema sch;
    public static void main( String[] args )throws Exception {
//        new File时,当前目录为工程根目录,"teacher.xsd" 等效于 "D:/workspace/wnj-ui/teacher.xsd"
//        "/jaxb/teacher.xsd" 等效于 "D:\jaxb\teacher.xsd"
//        sch = schFactory.newSchema( new File("teacher.xsd") );
        sch = schFactory.newSchema(Test.class.getResource( "/jaxb/teacher.xsd" ));
        toXml();
        toObj();
    }

    private static void toXml()throws Exception {
        Teacher teacher = initTeacher();
        //
        JAXBContext jaxbContext = JAXBContext.newInstance( Teacher.class );
        // marshal 整理,编列,元帅的意思
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setSchema( sch );
        // format, make every element keep a separate line. 
        jaxbMarshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true );

        //output --> file
        File file = new File( filePath );
        jaxbMarshaller.marshal( teacher, file );
        //output --> console
        jaxbMarshaller.marshal( teacher, System.out );
    }
    
    private static void toObj()throws Exception {
        File file = new File( filePath );
        JAXBContext jaxbContext = JAXBContext.newInstance( Teacher.class );
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Teacher teacher = (Teacher) jaxbUnmarshaller.unmarshal( file );
        System.out.println( teacher.getName() );
    }
    
    private static Teacher initTeacher(){
        Teacher teacher = new Teacher();
        teacher.setName( "DAO SHI" );
        teacher.setMobile( "18912345678" );
        Address address = new Address();
        address.setArea( "bei jing, hai dian qu" );
        address.setStreet( "shang di 8 jie 88 hao" );
        teacher.setAddress( address );
        return teacher;
    }

}

 

分享到:
评论

相关推荐

    JAXB 利用xsd文件生成java类

    在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) 文件来生成对应的Java类,从而简化XML处理的工作流程。 1. **XML Schema (XSD) 文件**: - XML Schema是一种W3C标准,用于定义XML文档的...

    JAXB + XSD

    XSD文件可以用来验证XML文档是否符合预定义的规则,确保数据的一致性和准确性。通过XSD,我们可以规定元素、属性、数据类型以及它们之间的关系,为XML文档提供了一个形式化的规范。 **xsd.exe** 是Microsoft .NET ...

    纯Java(swing)写的xsd验证xml - 含

    标题中的“纯Java(swing)写的xsd验证xml”是指使用Java编程语言,结合Swing图形用户界面库,开发的一个工具,用于验证XML文档是否符合指定的XSD(XML Schema Definition)规范。XML Schema是W3C推荐的一种XML文档...

    jaxb功能用法

    4. 测试代码,演示如何使用JAXB进行XML与Bean的转换,并进行XSD验证。 通过这个项目,你可以学习如何在实际应用中使用JAXB进行XML数据的处理,并确保数据的有效性和一致性。 总结,JAXB是Java平台上强大的XML处理...

    xml文件转xsd文件

    将XML文件转换为XSD文件,主要是为了更好地管理和验证XML文档的结构,确保数据的一致性和准确性,同时也便于生成对应的Java类,以进行程序开发。 在Java开发中,经常需要处理XML数据。有了XSD文件,开发者可以使用...

    Xsd的使用命令

    5. **XSD与编程**:讲解如何使用XSD文件生成源代码,例如Java的JAXB框架如何将XSD转换为Java类。 6. **验证XML**:介绍如何使用XSD命令行工具对XML文件进行验证,确保其符合模式规定。 7. **XSD设计原则**:分享...

    java生成xsd,xml示例

    XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD文件。 XML是一种标记语言,它允许我们在文档中定义元素、属性和结构。这些元素和属性描述了...

    JAXB.zip_jaxb

    **xml-resources** 目录可能包含与XML相关的资源,如XSD(XML Schema Definition)文件,这些文件定义了XML文档的结构和约束,可以被JAXB用来验证生成的XML文档的合法性。 **test** 目录通常存放单元测试代码。在这...

    xsd通过java验证科学计数法

    为了在Java中使用这个XSD进行验证,我们需要引入Java API for XML Validation (JAXB)。首先,将XSD转换为Java类,可以使用工具如XJC(Java Architecture for XML Binding的命令行工具)。之后,使用`javax.xml....

    xml 转成xsd

    而XSD(XML Schema Definition)是W3C制定的一种规范,用于定义XML文档的结构和数据类型,提供了对XML文档的严格验证。 在IT行业中,将XML转换为XSD的主要目的是为了确保XML数据的结构一致性与正确性。XSD定义了...

    xsd转换成java对象

    XSD转换成Java对象的过程,也称为XML到Java对象的绑定或者XML Schema Binding,是将XML数据映射为Java类,使得程序能够方便地读取、操作和验证XML数据。这一过程在处理XML数据丰富的系统中非常常见,如Web服务或企业...

    JAXB XMLSPY

    XMLSPY则是一款强大的XML开发工具,提供了编辑、调试、验证和转换XML相关文档的功能,同时也支持JAXB技术。 **JAXB的工作原理** JAXB的核心在于将Java类与XML Schema(XSD)进行绑定。通过这种方式,Java对象可以...

    Java XML绑定技术 (Castor JAXB XMLBeans)

    本文将详细介绍Java XML绑定技术的基本概念,并重点介绍三种常用的实现框架:JAXB、XMLBeans和Castor。 #### 二、Java XML绑定技术概述 Java XML绑定技术(简称XML Binding)是一种能够自动将XML文档映射到Java...

    JaxbGen.rar

    **JaxbGen.rar** 是一个压缩包,包含与Java中的JAXB(Java Architecture for XML Binding)...通过分析并运行这个项目,你可以深入理解如何利用JAXB来有效地操作XML文档,同时熟悉XSD在数据验证和互操作性中的作用。

    jaxb_impl,api,xjc,jsr

    5. **jaxb-xjc.jar**:XJC是JAXB的命令行工具,用于从XML Schema(XSD)生成对应的Java类。XSD定义了XML文档的结构,XJC可以将这些结构转化为Java对象模型,方便开发人员进行操作。 6. **jsr173_1.0_api.jar**:这...

    castor1.4 xsd生成java

    它提供了验证XML文档是否符合特定规范的机制,确保数据的一致性和完整性。 3. **XSD到Java映射**:Castor 1.4版本提供了一种机制,可以将XSD文件解析并生成对应的Java类。这大大简化了处理XML数据的过程,因为...

    xml2xsd2java2.rar

    5. 异常处理和验证:工具类可能还包括了对转换过程中可能出现的错误和异常的处理机制,比如XML格式错误、XSD验证失败等。同时,基于XSD的验证可以在转换过程中确保XML数据的合法性。 6. 性能优化:高效的转换工具类...

    Xsd转换xml

    例如,Java中可以使用JAXB(Java Architecture for XML Binding)或者XSOM(XML Schema Object Model)库,这些库提供了从XSD生成XML的能力。C#中,.NET Framework提供了System.Xml.Schema命名空间,其中的类可以...

    JAXB自定义命名前缀无效的问题

    4. **XML Schema定义不匹配**:如果你的JAXB映射基于XML Schema (XSD),那么XML Schema中的命名空间定义需要与Java代码中的定义一致。如果存在不匹配,可能会导致命名前缀无效。 5. **依赖库冲突**:有时候,项目中...

    cxf所需JAR包和xsd文件

    此外,XSD文件还可以用于验证XML消息,确保其符合预先定义的模式。 3. **Spring整合CXF**: Spring框架是企业级Java应用的首选,而CXF的Spring整合使得两者可以无缝配合。通过Spring,开发者可以使用声明式的方式...

Global site tag (gtag.js) - Google Analytics