- 浏览: 989726 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
一个完整个对象-模型映射,一定少不了对验证的支持。
jaxb当然也支持验证,分为两个部分:marshall和unmarshall。
一、unmarshall端
unmarshall是从xml到java对象的过程,因此验证的是这个xml文件是不是有效的,要在unmarshall端使用验证非常简单:
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); unmarshaller.setSchema(SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema( new File("students.xsd")));
从jaxb2.0开始,通过调用方法setSchema()的方式来指定验证,在2.0以前的版本里,通过调用setValidating()方法来指定验证:
unmarshaller.setValidating(true)
验证信息可以是一个schema文件,也可以是一个dtd文件(如果支持的话),要使用dtd的验证,则代码大致为:
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); unmarshaller.setSchema(SchemaFactory.newInstance( XMLConstants.RELAXNG_NS_URI).newSchema( new File("students.dtd")));
一旦设置了验证信息,在进行unmarshell的时候,jaxb就会对读入的xml文件进行验证,例如有schema文件:
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.liulutu.com/students/" targetNamespace="http://www.liulutu.com/students/"> <element name="students"> <complexType> <sequence> <element name="student" type="tns:StudentType" maxOccurs="unbounded" /> </sequence> </complexType> </element> <simpleType name="SexType"> <restriction base="string"> <enumeration value="Male"></enumeration> <enumeration value="Female"></enumeration> </restriction> </simpleType> <complexType name="StudentType"> <attribute name="sex" type="tns:SexType"></attribute> <attribute name="name" type="string"></attribute> </complexType> </schema>
和符合这个schema的一个xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns2:students xmlns:ns2="http://www.liulutu.com/students/"> </ns2:students>
如果指定了需要验证,当根据上面的schema读入些xml时,就会抛出一个验证失败异常:
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.b: The content of element 'ns2:students' is not complete. One of '{student}' is expected.] at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
注:需要在unmarshall.unmarshall()方法调用之前设置验证信息。
二、marshall端
jaxb2.0中,marshall和unmarshall的验证设置是一样的:
ObjectFactory factory = new ObjectFactory(); Students students = factory.createStudents(); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setSchema(SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema( new File("students.xsd"))); marshaller.marshal(students, new File("a.xml"));
和上面一样,会得到一个异常信息:
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.b: The content of element 'ns2:students' is not complete. One of '{student}' is expected.] at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(Unknown Source) at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
如果使用jaxb2.0之前的版本,则验证方式如下:
Validator validator = jaxbContext.createValidator(); validator.validate(students);
发表评论
-
自定义Spring MVC中的数据绑定
2015-02-01 18:27 1499默认情况下,spring mvc的数据映射的实现是自动查找请 ... -
Java单例(Singleton)
2014-05-22 11:40 1910【译自:http://www.journaldev.com ... -
Java函数式编程学习二
2014-06-05 10:58 2674上一节里,介绍了一个函数接口: java.uti ... -
Java函数式编程学习一
2014-05-07 22:02 7344一、缺省方法 首先看一段用Java 8写的代码: ... -
快速排序的几种实现
2014-05-06 23:13 1689快速排序是最经典的 ... -
计算Fibonacci数列
2014-05-04 15:37 1663Fibonacci数列的定义如 ... -
(转)Java函数式编程系列文章
2014-04-11 16:52 769转载: Java函数式编程(一) Java函数式编程( ... -
Java中的动态代理
2014-04-02 15:11 2356在使用CXF的时候,尤其是创建针对REST或SOAP服务的 ... -
Java 7中的Path
2014-04-01 17:33 0package test; public ... -
HashMap对HashTable和ArrayList对Vector
2014-03-26 14:16 856有人面试总喜欢问比 ... -
Java国际化:BreakIterator
2014-03-21 11:51 2977【译自:http://tutorials.jenkov.c ... -
Java中使用StreamTokenizer
2014-03-21 09:44 3325按照Javadoc里的描述:StreamTokenizer ... -
Java中枚举的用法
2014-03-19 15:31 2804Java 5里新引用了枚举类型,这篇文章简单介绍一下它的基 ... -
Java线程类三
2014-03-06 11:18 1143一、Callable 最早创建线程要么是通过实现Runn ... -
Java线程类二
2014-03-05 14:21 1195一、java.util.concurrent.Exchan ... -
Java线程类一
2014-03-04 17:25 953一、java.util.concurrent.CountD ... -
基于Java的Dropbox文件操作
2014-01-22 11:15 4333Dropbox提供了基于各种类型的API和应用类型的开发工 ... -
使用特殊字符控制Console输出
2013-11-28 10:39 1065如果要在console上打印 Hello + 1到10,最简 ... -
控制JAXB的输入输出
2013-11-27 16:06 4156上一节介绍了如何在解析模型的时候构建模型之间的父子链,其实 ... -
JAXB中怎么构建对父对象的链接
2013-11-27 11:17 3601还是以在第一节介绍JAXB的schema为例: < ...
相关推荐
通过分析这个"JAXB.zip_jaxb"压缩包的内容,我们可以学习到如何在NetBeans中创建和管理一个JAXB项目,理解JAXB的基本原理和用法,以及如何利用Ant进行构建和测试。这不仅有助于加深对JAXB的理解,也能够提升在实际...
通过这个项目,你可以学习如何在实际应用中使用JAXB进行XML数据的处理,并确保数据的有效性和一致性。 总结,JAXB是Java平台上强大的XML处理工具,它通过将XML与Java Bean之间建立映射,简化了数据交换。结合XSD...
### Jaxb入门学习知识点详解 #### 一、JAXB概念与作用 JAXB (Java Architecture for XML Binding) 是一种将XML数据与Java对象互相转换的技术。它通过编组(marshalling)和解组(unmarshalling)的过程,使得开发者...
Java JDK 1.6是Java开发工具包的一个重要版本,发布于2006年,引入了许多增强功能和新特性,极大地提升了开发效率...通过这样的示例,学习者可以深入理解JAXB的工作原理,以及它如何简化Java程序与XML数据交互的过程。
5. **测试服务**: 使用Axis自带的`testClient`或自定义客户端调用服务,验证部署是否成功。 接下来,我们来看JAXB的角色。JAXB允许你通过注解将Java类映射为XML Schema,反之亦然。在Web服务中,JAXB通常用于处理...
4. **XML Schema支持**:JAXB支持XML Schema,这意味着开发者可以基于XML Schema来验证XML文档,确保数据的正确性。 5. **集成性**:JAXB可以与其他Java技术如JAX-WS(Java API for XML Web Services)无缝集成,...
`jaxb-istack-commons` 就是在JAXB基础上进行扩展和增强的工具集,它提供了许多实用工具类和方法,帮助开发者更轻松地处理与XML相关的操作,比如XML的序列化和反序列化,以及XML数据的验证等。 关于许可,`jaxb-...
标题中的“纯Java(swing)写的xsd验证xml”是指使用Java编程语言,结合Swing图形用户界面库,开发的一个工具,用于...此外,你还可以学习如何将XML解析库(如JAXB或DOM)与自定义逻辑结合,以实现XML文档的验证功能。
教程通常包括逐步指南,演示如何创建基本的JAXB绑定,如何生成Java类,如何使用Unmarshaller和Marshaller,以及如何处理XML验证和错误。这些教程对于初学者尤其有用,帮助他们快速上手并掌握JAXB的基本操作。 "jaxb...
5. **数据绑定API的使用**:JAXB提供了诸如`Marshaller`、`Unmarshaller`、`Binder`和`ValidationEventHandler`等接口,示例中会展示如何利用这些API进行XML数据的序列化和反序列化,并处理可能出现的错误和验证问题...
如果你正在学习或使用JAXB处理XML,这篇博客可能会提供一些实用的指导。 总的来说,这个压缩包提供了一个使用Java JAXB处理XSD-10的示例项目,涵盖了从XSD到Java对象的映射,以及可能的反向转换,是理解JAXB工作...
8. **自定义逻辑**:虽然JAXB提供了自动化转换,但有时仍需编写自定义逻辑来处理特殊需求,例如数据验证、转换或计算。 了解以上知识点后,开发者可以有效地利用Suunto SML模型与JAXB技术,构建与Suunto设备兼容的...
通过学习本书,读者可以掌握Java与XML的集成技巧,理解如何利用Java API处理XML文档,以及如何构建和消费Web服务。对于Java开发者来说,XML技术是必备的技能之一,这本手册将帮助他们提升在这个领域的能力。
- 类到XML:学习如何使用JAXB注解将Java类映射为XML文档。 - XML到类:掌握如何从XML文档反向生成Java对象。 通过这九个章节的学习,可以全面了解XML的核心概念和技术,并掌握如何在实际项目中运用这些知识,实现...
三、XML Schema验证 XML Schema定义了XML文档的结构和数据类型,确保文档符合预定规范。使用XML Schema验证,可以避免因数据格式错误导致的问题。在Java中,可以使用`javax.xml.validation`包提供的API进行验证,...
通过阅读和理解这些文件,你可以学习如何在实际项目中结合 Camel 和 JAXB 来处理 XML 数据。 总结来说,"CamelJAXBExample" 是一个展示如何在 Apache Camel 中利用 JAXB 处理 XML 数据的示例。这个例子将帮助开发者...
这些基础知识是理解XML数据结构和验证机制的关键,对于任何想要处理XML的Java开发者来说,都是不可或缺的。 接着,书中的章节会深入讲解Java API for XML Processing (JAXP),这是Java平台用于解析和生成XML的官方...
7. **Servlets、JSP与Web框架**:掌握Servlet和JSP的生命周期,学习JSTL和其他第三方标签库。熟悉主流的Web框架,如JSF、Struts、Tapestry、Cocoon和WebWork,理解MVC模式。 8. **Web服务器与部署**:学习如何配置...
- **开发框架**: 如Java中的JAXB(Java Architecture for XML Binding)等工具可以帮助开发者更方便地处理XML数据。 #### 四、XML的实例分析 **4.1 示例文档分析** - **结构**: 分析XML示例文档的结构,理解各...
深入学习Java安全模型,包括类加载器安全、字节码验证、安全管理器、策略和权限、代码签名、数字签名、加密学基础、认证机制(如Kerberos)。熟悉各种安全/认证API,如JAAS(Java Authentication and Authorization ...