第六讲 xml 在 java 中的应用

53
第第第 XML 第 Java 第第第第 JAXP JAX-RPC 第 JAXR

Upload: conlan

Post on 16-Mar-2016

119 views

Category:

Documents


1 download

DESCRIPTION

第六讲 XML 在 Java 中的应用. JAXP 、 JAX-RPC 与 JAXR. 本节内容. 用于 XML 处理 的 Java API (JAXP) 基于 XML RPC 的 Java API (JAX-RPC) 用于 XML 注册 的 Java API (JAXR). 1. JAXP. JAXP(Java API for XML Parsing) , Sun 公司用来 解析 XML 的 API , 利用 Java 程序设计语言编写的应用程序来处理 XML 数据。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第六讲  XML 在 Java 中的应用

第六讲 XML 在 Java 中的应用JAXP 、 JAX-RPC 与 JAXR

Page 2: 第六讲  XML 在 Java 中的应用

2

本节内容 用于 XML 处理的 Java API (JAXP) 基于 XML RPC 的 Java API (JAX-RPC) 用于 XML 注册的 Java API (JAXR)

Page 3: 第六讲  XML 在 Java 中的应用

3

1. JAXP JAXP(Java API for XML Parsing) , Sun 公司用来解析 XML 的 API ,利用 Java 程序设计语言编写的应用程序来处理 XML 数据。 通过使用这个 API 可以在解析 XML 文档时候不必明确地指出 XML 解析器类的名字,从而使写出的 Java 代码具有可移植性。 JAXP 与 Sun 的语法分析器一起提供,以便可以立即使用。

Page 4: 第六讲  XML 在 Java 中的应用

4

JAXP( 续 ) JAXP 支持解析器标准 SAX 和 DOM ,以事件流的形式解析数据,或者建立数据的对象表示。 JAXP 还支持 XSLT 标准,以控制数据的表示并且将数据转换成其他格式,如 HTML 。 JAXP 还提供名称空间支持,允许使用可能产生名称冲突的 DTD 。

Page 5: 第六讲  XML 在 Java 中的应用

5

JAXP( 续 ) JAXP API 主要定义在 javax.xml.parsers 标准扩展包,含有 3 个与供应商无关的工厂类。

Page 6: 第六讲  XML 在 Java 中的应用

6

JAXP API SAXParseFactory 工厂类,提供了一个 SAXParse 。 DocumentBuilderFactory 工厂类,提供了一个 DocumentBuilder ,又创建依从 DOM 的 Document 对象。 TransformerFactory 工厂类,提供了一个XSLT 转换器。

Page 7: 第六讲  XML 在 Java 中的应用

7

JAXP API( 续 ) 工厂 API 允许插入其他供应商提供的 XML 实现,而不用修改自己的源代码。 得到的实现取决于 java.xml.parsers.SAXParseFactory , java.xml.parsers.DocumentBuilderFactory , java.xml.transform.TransformerFactory 系统属性的设置。

Page 8: 第六讲  XML 在 Java 中的应用

8

JAXP 库 SAX API DOM API XSLT API

Page 9: 第六讲  XML 在 Java 中的应用

9

定义 SAX 和 DOM API 的库 javax.xml.parsers 这是 JAXP API ,为不同供应商提供的 SAX 和 DOM 解析器提供通用接口。 org.w3c.dom 定义 Document 类(一个 DOM) 以及对应于一个 DOM 的所有组件的类。 org.xml.sax 由 XML-DEV 组定义的基本 SAX API 。 javax.xml.transform 定义 XSLT API ,通过这些 API 可以将 XML 转换成其他格式。

Page 10: 第六讲  XML 在 Java 中的应用

10

用于 XML 的简单 API : SAX SAX 是一种事件驱动、串行访问 XML 文档的机制,它一个接一个地处理元素。 是面向状态无关处理的,对某一元素的处理与其前面的元素无关。 是目前处理 XML 文档可用机制中最快并且所需内存最少的一种。

Page 11: 第六讲  XML 在 Java 中的应用

11

用于 XML 的简单 API : SAX( 续 ) SAX API 适宜于服务器端和高性能的应用程序,以及数据过滤器,因为它们需要在内存中有数据的表示。 是需要传送和接收 XML 文档的 servlet和面向网络的程序经常使用的。

Page 12: 第六讲  XML 在 Java 中的应用

12

用于 XML 的简单 API : SAX( 续 ) SAX 是事件驱动模型,因此很难实现可视化。 设置程序使用 SAX比设置使用 DOM 需要做更多的工作。

Page 13: 第六讲  XML 在 Java 中的应用

13

何时使用 SAX 当想把现有的数据转换成 XML 时,理解SAX 事件模型非常有用。 SAX速度快而且效率高,但其事件模型对于状态无关这样的过滤器最有用。 SAX 不构建 XML 数据的内部表示 (树结构 ) , SAX 对内存的要求比 DOM小。

Page 14: 第六讲  XML 在 Java 中的应用

14

何时使用 SAX( 续 ) 对于状态相关的处理, Streaming API for XML(StAX)拉式解析器可能是更好的选择。 如果只是简单地读取数据并在此基础上运行应用程序,使用类似于串行 I/O 流的拉式解析器和 SAX API 。 当需要交互修改 XML结构的时候,使用内存中结构更有意义, DOM 是这样的一个模型,但需要进行复杂的编码。

Page 15: 第六讲  XML 在 Java 中的应用

15

SAX 解析 API 的基本概要图 图略

Page 16: 第六讲  XML 在 Java 中的应用

16

SAX 解析 API 的基本概要图( 续 ) 使用一个 SAXParserFactory 类的实例来生成一个解析器实例。 该解析器包装了一个 SAXReader 对象,当解析器的 parse()方法被调用时,阅读器调用该应用程序中实现的若干回调方法之一,这些方法由 ContentHandler 、ErrorHandler 、 DTDHandlerResolver接口定义。

Page 17: 第六讲  XML 在 Java 中的应用

17

Simple API for XML (SAX) API SAXParserFactory 根据系统特性,创建一个解析器实例。 SAXParser 定义了若干种 Parser()方法。 SAXReader 包装于 SAXParser ,与 SAX 事件处理器进行通信。

Page 18: 第六讲  XML 在 Java 中的应用

18

Simple API for XML (SAX) API( 续 ) DefaultHandler 实现 ContentHandler 、 ErrorHandler 、 DTDHandler 和 EntityResolver 接口。 ContentHandler 在识别 XML 标签时, startDocument 、 endDocument 、 startElement 以及 endElement等方法将被调用,这一接口还定义了 characters 和 processingInstruction方法。

Page 19: 第六讲  XML 在 Java 中的应用

19

Simple API for XML (SAX) API( 续 ) ErrorHandler 调用 error 、 fatalError 以及 warning等方法响应各种解析错误。 DTDHandler 在处理 DTD 时,用于识别和作为一个未解析实体的声明。 EntityResolver 当解析器必须识别由 URI 标识的数据时,调用 resolveEntity方法。

Page 20: 第六讲  XML 在 Java 中的应用

20

SAX 包 org.xml.sax 定义 SAX 接口。 org.xml.sax.ext 定义 SAX 扩展名,用于进行复杂的 SAX 处理。 org.xml.sax.helpers 含有助手类,以使 SAX更方便使用。 javax.xml.parsers 定义 SAXParserFactory 类,返回 SAXParser ,并定义用于报告错误的异常类。

Page 21: 第六讲  XML 在 Java 中的应用

21

文档对象模型: DOM DOM 是一个普通的树型结构,其中的每个节点包含 XML结构的一个组件。 最常见的节点类型是元素节点和文本节点。 在 DOM 中 Text 节点位于元素节点下,而数据始终存储在文本节点中。

Page 22: 第六讲  XML 在 Java 中的应用

22

何时使用 DOM JAXP 1.2 实现支持 XML Schema ,这对于任何给定应用程序可能是一个重要的考虑因素。 DOM 是为文档设计的。 使用 DOM ,可以轻松创建所需要的语法结构。

Page 23: 第六讲  XML 在 Java 中的应用

23

何时使用 DOM ( 续 ) 对于成熟的文档和复杂的应用程序,如果需要使用 XML架构。 如果在开发的应用程序中同时处理文档和数据。 如果需要从 XML 数据构建对象树,以便在应用程序中处理它,或者将内存中的对象树转换成 XML 。

Page 24: 第六讲  XML 在 Java 中的应用

24

何时使用 DOM ( 续 ) DOM 标准是针对内存中文档模型的成文标准,对需要将由于 API 的修改而造成的费用降至最低限度的大型应用程序尤为适用。 选择 DOM会使应用程序更易于满足未来的需要。

Page 25: 第六讲  XML 在 Java 中的应用

25

DOM 中的文档模型与 JDOM中的数据模型主要区别 存在于层次结构中的节点种类 (构成节点的方式 ) 。 “混合内容”的能力 ( 文本和元素 ) 。

Page 26: 第六讲  XML 在 Java 中的应用

26

DOM API 一种更容易使用的 API 。 提供一种对象的树型结构,来处理其封装的应用程序对象的层次。 对于交互式应用程序, DOM API相当理想,因为整个对象模型都在内存中,可由用户直接访问和处理。 构造 DOM 要求读取整个 XML结构并且将对象树保存在内存中, CPU和内存资源的开销较大。

Page 27: 第六讲  XML 在 Java 中的应用

27

DOM API 图 图略

Page 28: 第六讲  XML 在 Java 中的应用

28

DOM 包 org.w3c.dom 按照W3C 的规定,为 XML 或 HTML 文档定义 DOM 编程接口。 javax.xml.parsers 定义 DocumentBuilderFactor 类和 DocumentBuilder 类,返回一个实现W3C Document 接口的对象,还定义了 ParserConfigurationException 类,用于报告错误。

Page 29: 第六讲  XML 在 Java 中的应用

29

可扩展样式表语言转换: XSLT 定义了寻址 XML 数据 (XPath) 和指定数据转换的机制,以便将数据转换为其他形式 (HTML 、纯文本等 ) ,或者将遗留数据结构转换成 XML 。 JAXP 包括了 XSLT 的一个解释实现,称为 Xalan 。 一种允许在碰到某个特殊元素时,指定完成何种工作的语言。

Page 30: 第六讲  XML 在 Java 中的应用

30

XSL 主要子部件 XSL-FO Formatting Object 标准最大的子部件,提供了描述字体大小、页面布局和对象显示的其他方面的机制。 XSLT XPath 一种解决机制,允许指定通向某个元素的路径,以描述不同种类的转换。

Page 31: 第六讲  XML 在 Java 中的应用

31

JAXP 转换包 javax.xml.transform 定义为了获得 Transformer 对象而使用的工厂类。 javax.xml.transform.dom 定义 DOMSource 和 DOMResult 类。 javax.xml.transform.sax 定义 SAXSource 和 SAXResult 类。 javax.xml.transform.stream 定义 StreamSource 和 StreamResult 类。

Page 32: 第六讲  XML 在 Java 中的应用

32

XPath规范所定义抽象文档模型节点类型 Root Element Text Attribute Comment Processing instruction Namespace

XSLT/XPath数据模型由一个包含各种节点的树组成

Page 33: 第六讲  XML 在 Java 中的应用

33

XSLT API 在 javax.xml.transform 中定义。 允许将 XML 数据写入到一个文件中,或者将其转换成其他格式。 还可以一起使用 XSLT 与 SAX API ,将遗留数据转换成 XML 。

Page 34: 第六讲  XML 在 Java 中的应用

34

XSLT API( 续 ) 图略

Page 35: 第六讲  XML 在 Java 中的应用

35

XSLT 包 javax.xml.transform 定义 TransformerFactory 类和 Transformer 类,以得到能够进行转换的对象。 javax.xml.transform.dom 从 DOM 创建输入 ( 源 ) 和输出 (结果 ) 对象的类。 javax.xml.transform.sax 从 SAX 解析器创建输入 ( 源 ) 对象,从 SAX 事件处理器创建输出 (结果 ) 对象的类。 javax.xml.transform.stream 从 I/O 流创建输入 ( 源 ) 对象和输出 (结果 ) 对象的类。

Page 36: 第六讲  XML 在 Java 中的应用

36

2. JAX-RPC 基于 XML 的 RPC 的 Java API 。 一种用于构建使用 RPC 和 XML 的Web服务和客户端的技术。 常用于分布式客户 - 服务器模型,一种支持客户端执行其他系统上的过程的 RPC 机制。 在 JAX-RPC 中,一个远程过程调用由一个诸如 SOAP 这样的基于 XML 的协议表示, JAX-RPC API 为应用程序开发人员隐藏了 SOAP 的复杂性。

Page 37: 第六讲  XML 在 Java 中的应用

37

JAX-RPC( 续 ) 利用 JAX-RPC ,客户端和Web服务拥有Java 编程语言的平台独立性。 一个 JAX-RPC客户端可以访问一个并非运行在 Java平台上的Web服务,反之亦然。

JAX-RPC 使用由W3C规定的HTTP 、 SOAP 和WSDL等技术

Page 38: 第六讲  XML 在 Java 中的应用

38

JAX-RPC( 续 )

JAX-RPC Web服务和客户端之间的通信

图略

Page 39: 第六讲  XML 在 Java 中的应用

39

JAX-RPC 支持的类型 JAX-RPC 将 Java 编程语言的类型映射到 XML/WSDL 定义上。 在 J2SE 中,不是所有的类都能作为 JAX-RPC 中的一个方法参数或返回值。

Page 40: 第六讲  XML 在 Java 中的应用

40

JAX-RPC 支持的类型 ( 续 ) JAX-RPC 所支持 J2SE SDK类: java.lang.Boolean java.lang.Byte java.math.BigDecimal java.math.BigInteger java.net.URI java.util.Date … … …

Page 41: 第六讲  XML 在 Java 中的应用

41

JAX-RPC 支持的类型 ( 续 ) JAX-RPC 所支持 Java 编程语言基元类型: boolean byte double float int long short

Page 42: 第六讲  XML 在 Java 中的应用

42

JAX-RPC 支持的类型 ( 续 ) JAX-RPC 还支持数组,只要数组中元素的类型是它所支持的。 JAX-RPC 还支持值类型。 JAX-RPC 也支持 JavaBeans 组件, JavaBeans 组件必须针对每个 bean 属性有一个 getter 和 setter方法, bean 属性的类型必须是 JAX-RPC 所支持的类型。

值类型是一种其状态可在客户端和远程服务间作为方法参数或返回值传递的类

Page 43: 第六讲  XML 在 Java 中的应用

43

Web服务互操作性和 JAX-RPC JAX-RPC 1.1 支持 Web Services Interoperability (WS-I) Basic Profile Version 1.0 、 Working Group Approval Draft 。

WS-I Basic Profile 是一个文档,用于阐明 SOAP 1.1 和WSDL 1.1规范,以便提高 SOAP 的互操作性

Page 44: 第六讲  XML 在 Java 中的应用

44

3. JAXR 用于 XML 注册的统一、标准的 Java API 。 XML 注册是一个基础结构,用于构建、部署和发现 Web服务,是一种能够促进动态和松耦合 B2B交互的中性第三方,可作为共享资源供组织使用,提供的形式通常为基于Web的服务。 允许使用单个便于使用的抽象 API 访问多种 XML 注册。

Page 45: 第六讲  XML 在 Java 中的应用

45

JAXR ( 续 ) 赋予程序员编写能够跨越各种目标注册移植的注册客户端程序的能力。 JAXR规范的当前版本包括 JAXR信息模型与 ebXML Registry 和 UDDI Version 2之间的详细绑定信息。

Page 46: 第六讲  XML 在 Java 中的应用

46

JAXR体系结构 JAXR客户端 一个使用 JAXR API 通过 JAXR 提供者访问业务注册的客户端程序。 JAXR 提供者 一种 JAXR API 实现,提供对特定注册提供者或基于通用规范的注册提供者类的访问。

Page 47: 第六讲  XML 在 Java 中的应用

47

JAXR体系结构 ( 续 )

JAXR体系结构

图略

Page 48: 第六讲  XML 在 Java 中的应用

48

JAXR 提供者主要程序包 javax.xml.registry 由定义注册访问接口的 API 和类组成,最基本接口是 Connection 、 RegistryService 、 BusinessQueryManager 和 BusinessLifeCycleManager 。 javax.xml.registry.infomodel 由为 JAXR 定义信息模型的接口组成, RegistryObject 是基本的接口,其子接口又包括 Organization 、 Service 和 ServiceBinding 。

Page 49: 第六讲  XML 在 Java 中的应用

49

在 JAXR客户端使用分类法 JAXR客户端是可以使用 JAXR API 访问注册的客户端程序。 在 JAXR API 中,分类法由 Classification Scheme 对象表示。

Page 50: 第六讲  XML 在 Java 中的应用

50

在 J2EE 应用程序中使用 JAXR客户端 可以创建使用 JAXR客户端访问注册的 J2EE 应用程序。 使用 JAXR 将组织发布到注册的 J2EE 应用程序。 查询注册以获取组织。

Page 51: 第六讲  XML 在 Java 中的应用

51

组织 Organization 对象是 JAXR API 中较为复杂的数据项之一

Name 对象。 Description 对象。 Key 对象 ( 由注册而非用户创建 ) 。 PrimaryContact 对象 ( 注册的授权User 对象 ) 。 Classification 对象集合。 Service 对象及其关联的 ServiceBinding 对象。

Page 52: 第六讲  XML 在 Java 中的应用

52

本节小结 Java API (JAXP) 。 RPC Java API (JAX-RPC) 。 Java API (JAXR) 。

Page 53: 第六讲  XML 在 Java 中的应用

53

下课了。。。

休息一会儿。。。