您的位置:首页 > 编程语言 > Java开发

Java技术与XML常见问题

2004-11-29 17:25 543 查看
Java技术与XML常见问题

一般问题 | JAXP | JAXB | JAXM | JAXR | JAX-RPC | J2EE

一般问题

XML 是什么? XML 是由谁开发的? XML 最大的优点是什么 ? XML 有什么应用? XML 和 Java 技术之间有何关系? 在 Java 技术中使用 XML 有什么优点? Sun 参与了哪些 XML 相关的活动? 在哪里可以找到更多的文档? 我可以向哪里发送评论和建议? 是否还有其他由 Sun 主办的关于 XML 的邮件列表可供订阅?
回到页首

Java API for XML Processing(JAXP )

什么是 Java API for XML Processing(JAXP )? 在哪里可以阅读关于 JAXP 的更多内容?
回到页首

Java Architecture for XML Binding( JAXB )

什么是 Java Architecture for XML Binding( JAXB )? JAXV 、 SAX 和 DOM 有什么不同?我应当选用哪一个? JAXB 如何工作? 谁参与开发 JAXB ? 我从哪里能够阅读到关于 JAXB 的更多内容?
回到页首

Java API for XML Messaging (JAXM)

什么是 Java API for XML Messaging (JAXM)? JAXM 基于什么标准? 是否必须在 J2EE 平台下使用 JAXM ? 什么是消息提供者? 是否必须使用消息提供者? JAXM 消息是否可以被路由到多个目的地? 是否能在 JAXM 消息中使用 ebXML 头部?
回到页首

Java API for XML Registries (JAXR)

什么是 Java API for XML Registries (JAXR)? JAXR API 与其他 XML API 之间有何关系? 为什么对 Java Naming and Directory Interface( JNDI )需要有一个新的 JAXR API ? 通过对 JAXR API 增加功能来增强 JNDI API 会不会更好? JAXR 信息模型中的 Association 的作用是什么?在所有 API 中都没有用到过它。 JAXR 信息模型中的 Classification 的作用是什么?在所有 API 中都没有用到过它。 为何 JAXR 是一个抽象的 API ,并且没有像 UDDI 或 ebXML 那样针对特定的注册项? 为什么 JAXP API 没有使用 UDDI 的术语和概念? 为什么 JAXR 信息模型使用 ebXML Registry Information Model 作为基础,而不采用 UDDI 数据结构? 为什么没有完整地开发 JAXR 信息模型?
回到页首

Java API for XML-Based RPC(JAX-RPC)

什么是 Java API for XML-Based RPC(JAX-RPC)? JAX-RPC 如何使用 SOAP ? 什么是 RPC ? XML 如何与 RPC 相关联? 对于 Web 服务, JAX-RPC 必须做哪些工作? 客户端与 JAX-RPC 服务器之间采用什么的交互模式? 远程方法调用或响应能否传送服务内容信息? 为什么 xrpcc 没有生成 WSDL 文件?
回到页首

Java 2 Platform, Enterprise Edition

Java 2 Platform, Enterprise Edition 是否能使用 XML ? 是否能用 JSP 页面生成动态的 XML 文档?
回到页首

一般问题

问:[b]XML 是什么? [/b]

答: XML,可扩展标记语言,是一种用于描述和构造独立于应用程序逻辑的通用语法。XML 可以为特定行业和应用程序定义无限制的语言。

问:[b]XML 是由谁开发的? [/b]

答: XML 是由万维网联盟( World Wild Web Consortium , W3C )发起的。 XML 开发工作始于 1996 年。

一群从业界到学院的众多种标记语言的专家,为 Web 开发了一种简化版本的 SGML (标准通用标记语言, Standard Generalized Markup Language ). 1998 年 2 月, XML 1.0 规范成为 W3C 的推荐标准。

问. [b]XML 最大的优点是什么?[/b]

答. XML 可以简化和降低数据在 Web 环境中进行交换和发布所需要的成本。 XML 是一种可供计算机和人阅读的基于文本的语法。 XML 可跨越不通平台和设备提供数据可移植性和可重用性。它还具有灵活性和可扩展性,在不破坏现有文档结构的前提下,允许添加新的标签。基于 Unicode , XML 提供全球语言支持。

问. [b]XML 有什么应用? [/b]

答. XML 在 B2B 网络应用程序的数据交换格式中扮演重要角色,例如电子商务、供应链管理、工作流和应用集成。 XML 的另一个应用是结构化信息管理,包括数据库中的信息。 XML 还提供了独立于媒体的发布,允许一次书写文档,以多种媒体格式和设备进行发布。在客户端, XML 还用于创建带有数据的定制视图。

问. [b]XML 和 Java 技术之间有何关系? [/b]

答. XML 和 Java 技术是互补的。 Java 技术提供了可移植的、可维护的代码,以便处理那些可移植的和可重用的数据。此外,XML 和 Java 技术具有很多共同的特性,使得它们可以在 Web 计算方面完美地结合,包括形成业界标准、平台独立、可扩展、可重用、 以 Web 为中心和国际化等方面。

问. [b]在 Java 技术中使用 XML 有什么优点? [/b]

答. 与其他编程语言如 C 或 C++ 相比, Java 技术使软件开发人员的生产力有了质的提高。此外,开发者使用 Java 平台,可以创建可重用和可维护的复杂的应用程序,这是脚本语言无法做到的。协同使用 XML 和 Java ,开发人员可以用很低的成本快速地构建复杂的和可互操作的 Web 应用程序。

问. [b]Sun 参与了哪些 XML 相关的活动? [/b]

答. Sun 积极参与 W3C 工作组,参加制定 XML 样式表 / 转换语言 (Stylesheet/Transformation , XSL/T) , XML Schema,Xlink 和 XML Query。 Sun 还参与了许多其他业界社团,包括 Oasis,XML.org 以及 Apache。

问. [b]在哪里可以找到更多的文档? [/b]

答. Java 技术与 XML 文档 页面包含了本网站提供的所有关于 Java 技术和 XML 文档的完全列表。

问. [b]我可以向哪里发送评论和建议?[/b]

答. 对于此项目的反馈意见,请发电子邮件至 xml-feedback@sun.com

问. [b]是否还有其他的由 Sun 主办的关于 XML 的邮件列表可供订阅? [/b]

答. 关于在 Java 平台使用 XML 技术的一般性讨论话题,请订阅 xml-interest@java.sun.com

回到页首



[b]Java API for XML Processing(JAXP ) [/b]

问. [b]什么是 Java API for XML Processing(JAXP)? [/b]

答. Java API for XML Processing,或简称为“JAXP”,可使应用程序采用一种独立于特定 XML 处理程序实现的 API 对 XML 文档进行解析和转换。 JAXP 还提供可插入特性,允许应用程序在特定 XML 处理程序实现之间很容易地切换。

要实现 XML 处理程序独立性这一目标,应用程序应当限制使用 JAXP API,并避免使用与实现相关的 API 。根据具体的应用程序,这可能易于或难以实现。 JAXP 包括了如 DOM 和 SAX 在内的业界标准 API 。

JAXP 出现的原因就是为了方便在 Java 平台上使用 XML 。例如,当前使用的 API ,如 DOM Level 2 ,不提供从一个 XML 输入文档中获得一个 DOM 文档对象的方法, JAXP 则可以做到。( DOM Level 3 提供这种功能,新版本的 JAXP 规范也可能会支持这种新的 Level 3 方案。) JAXP 的其他部分,如 javax.xml.transform 部分,不具备其他同等的独立于 XSLT 处理程序的 API 。

问. [b]在哪里可以阅读关于 JAXP 的更多内容? [/b]

答. 请参见 JAXP 常见问题 获得更多信息。

回到页首



[b]Java Architecture for XML Binding( JAXB ) [/b]

问. [b]什么是 Java Architecture for XML Binding( JAXB )? [/b]

答. Java Architecture for XML Binding( JAXB )简化了启用 XML 的 Java 程序的创建和维护。 JAXB 提供一个绑定的编译器和一个运行时框架用来支持 XML 和 Java 对象的双向映射。绑定编译器可将 W3C XML 样式转换成一个或多个 Java 类,这个过程无需开发人员编写复杂的解析代码。模式派生类以及绑定框架可对输入和输出的 XML 文档启用错误或有效性检查,因而可以确保系统接收、处理和生成有效而无误的消息。更多信息,请参阅 Reference Implementation 和 Public Draft Specification,以上文档均可在 JAXB 主页下载。

问. [b]JAXB、SAX 和 DOM 有什么不同?我应当选用哪一个? [/b]

答. SAX 是一种事件驱动的 XML 解析器,适用于高速处理 XML ,因为它不在内存中生成数据表示。与之不同,DOM 在内存中生成数据表示,允许应用程序对内存中的内容进行操纵。 SAX 和 DOM 都自动执行结构的有效性验证。一个应用程序可以使用 SAX 和 DOM 进行内容有效性验证,但这样的应用程序必须提供额外的代码,这可能会是复杂的、易于出错和难以维护的。

一个 JAXB 应用程序可以使用由模式生成的 Java 类对结构和内容进行有效性验证。与 DOM 类似,一个 JAXB 应用程序在内存中通过编组(marshalling) XML 文档来构造内容树,从而创建数据结构,这个树包括派生类的实例对象。但与 DOM 树不同,内容树是特定于某一种源模式的,不包含额外的树操纵功能,不允许使用其派生类的访问器方法对数据进行访问,也不能动态地构建。如果文档的内容是趋于动态且没有完好约束的,则在处理内容之前,在处理那些没有知名样式的 XML 内容方面,DOM 和 SAX 要比 JAXB 更适合。

问. [b]JAXB 如何工作? [/b]

答. 要构建 JAXB 应用程序,首先从 XML 模式开始。beta 版本要求模式语言是 XML Schema 的 W3C 2001 Recommendation。

在获得 XML 模式之后,就可以构建和使用 JAXB 应用程序,按以下这些步骤:

1. 将 XML Schema 提交给绑定的编译器,生成 Java 源文件。

您可以定制绑定声明,从而覆盖 XML Schema 组件与 Java 表示之间的默认绑定。

编译 Java 源代码。

3. 使用类和绑定框架,编写 Java 应用程序,如下:

o 构建表示 XML 数据的对象树,该数据按 XML Schema 是有效的,可以通过从文档中解组(unmarshalling)数据或实例化要创建的类。

o 访问和修改数据。

可以选择对与约束相关的数据的更改进行验证,这些约束在 XML Schema 中表示。

o 将数据整理为新的 XML 文档。

问. [b]谁参与开发 JAXB ? [/b]

答. JAXB 由 Java Community Process(JCP )正在进行开发,JCP 由专家组所组成,包括 IBM、Software AG、BEA Systems、Hewlett-Packard、 TIBCO Software Inc.、 Oracle、 Fujitsu Limited、Breeze Factor LLC、Macromedia Inc. 和 Intalio Inc.。Sun 是 W3C XML Schema Working Group 最积极的成员,并与其他业界团体共同工作,如 OASIS 和 xml.org 。

问. [b]我从哪里能够阅读到关于 JAXB 的更多内容? [/b]

答. 对于 JAXB 更高层的解释,请参阅 Java Web Services Tutorial 中的 JAXB 一章。还需提醒的是,详细用户指南也作为 JAXB 的一个部分发布。更多关于 JAXB 的技术和细节描述,请参看最新版本的规范,您可以从 JAXB 主页 下载。请注意,此规范使用 Adobe Acrobat PDF 格式。免费下载 Adobe Acrobat

回到页首



[b]Java API for XML Messaging (JAXM)[/b]

问. [b]什么是 Java API for XML Messaging(JAXM)? [/b]

答. Java API for XML Messaging(JAXM)是专门用于 Internet 上交换 XML 商业文档的 API 。常用于交换的 XML 文档的例子有订单、订购确认和发票。您可以在发送的消息中附带非 XML 数据。

问. [b]JAXM 基于什么标准? [/b]

答. JAXM 基于简单对象访问协议(Simple Object Access Protocol , SOAP)1.1和 SOAP with Attachments 规范。JAXM 还允许 SOAP 实现之上的标准协议实现,例如 SOAP-RP 或 ebXML Transport, Routing & Packaging V1.0–Message Service Specification。

问. [b]是否必须在 J2EE 平台下使用 JAXM ? [/b]

答. 不是,您可以免费使用 Java 2 Platform, Standard Edition (J2SE),就像使用 Java 2 Platform, Enterprise Edition (J2EE) 一样。一个独立客户端(不使用消息提供者的客户端)可以使用 J2SE 平台向可以处理请求-响应消息的 Web 服务发送此消息。这不需要在客户端进行部署或配置,因此很容易实现。

问[b]. 什么是消息提供者? [/b]

答. 消息提供者是一种服务,它使用消息传送基础设施来路由和传递消息。对于客户来说,发送和接受消息是完全透明的。使用消息提供者的应用程序必须使用一个到消息提供者的连接,在 JAXM API 中称之为 ProviderConnection 对象。使用消息提供者还需要某种部署和配置。通常情况下,客户端使用运行在容器中的消息提供者-servlet 或 J2EE 容器。在部署的时候,客户端需要为容器提供关于消息提供者的信息。将来,会有一种部署工具使这个过程更简单。

问. [b]是否必须使用消息提供者? [/b]

答. 不是。只有当您的应用程序需要单向(异步)消息传送时,您才需要使用消息提供者。在这种类型的消息中,一个消息作为一个操作发送给接受者,然后接受者在一段时间后使用另一个不同的操作进行响应。如果您的应用程序使用请求 - 响应样式的消息传送,回送此消息的响应被看作是同一个操作,您不需要消息提供者。当您不使用消息提供者时,您需要使用 SOAPConnection 对象,它支持更简单的请求-响应消息模型。

问. [b]JAXM 消息是否可以被路由到多个目的地? [/b]

答. 是的。可以在消息头指定即时接受者。这种能力的一种使用方法是启用自动业务处理。例如,两个商业组织认可他们之间交换的 XML 文档的环境,这样他们可以实现自动生成的消息和响应。比方说这两个商业组织约定订单命令首先进入订购部门,然后进入订单确认部门,然后进入送货部门,最后进入结算部门。每个部门有一个即时接受者(称之为 actor)。在 actor 结束它的处理之后,它将删除头部的所有关于自身内容,并将消息发送给头部中所列出的下一个 actor 。

问. [b]我是否能在 JAXM 消息中使用 ebXML 头部? [/b]

答. 是的,如果您使用一个在 SOAP 上实现的 ebXML 概要文件,那么可以使用 ebXML 头部。一个概要文件是一个标准协议,如 ebXML TRP 或 SOAP-RP ,它工作在 SOAP 之上,提供附加功能。您需要使用消息提供者支持概要文件,而且您需要让接受者使用相同的概要文件。

回到页首



[b]Java API for XML Registries (JAXR) [/b]

问. [b]什么是 Java API for XML Registries (JAXR)? [/b]

答. Java API for XML Registries(JAXR)提供一个统一的、标准的 Java API,用于访问不同类型的 XML Registries。XML 注册项是构建、部署和发现 Web 服务的基础设施。

问. [b]JAXR API 与其他 XML API 之间有何关系? [/b]

答. JAXR 提供者的实现可以使用 Jav API for XML-Based RPC (JAX-RPC) 在 JAXR 提供者与注册项提供者之间的通信,此注册项提供者输出类似 RPC 的基于 SOAP 的接口(例如, UDDI )。

JAXR 提供者的实现可能会使用 Java API for XML Messaging(JAXM)在 JAXR 提供者与注册项提供者之间进行通信,该注册项提供者输出基于 XML Messaging 的接口(如 ebXML TRP )。

Java API for XML Processing (JAXP) 与 Java Architecture for XML Binding (JAXB)会被 JAXR 提供者和 JAXR 客户端使用,用于处理向 Registry 提交或从 Registry 中获取的 XML 内容。

问. [b]为什么对 Java Naming and Directory Interface(JNDI)需要有一个新的 JAXR API ? [/b]

答. JNDI API 采用与 JAXR API 完全不同的需求集合进行设计。这两种抽象的 API 都遵循现有的规范。然而,抽象目录服务与用于发布和发现 Web 服务的 XML Registries 有很大的不同。JAXR API 需要更丰富的元数据能力以及查询能力来进行分类和关联。

问. [b]通过对 JAXR API 增加功能来增强 JNDI API 会不会更好? [/b]

答. 这个选择被考虑过。要满足 XML Registries 的额外需求,需要细化信息模型。为了解决目录服务的需求,在 JNDI API 设计中强制使用了一个现有的信息模型。扩展 JNDI API 将限制 JAXR API ,并需要考虑实现 JNDI API的后向兼容性。

问. [b]JAXR 信息模型中的 Association 的作用是什么?在所有 API 中都没有用到过它。 [/b]

答. Association 用于彼此关联两个 RegistryObjects 。在注册项中的两个对象之间可以定义一个 Association,并使用 GenericLifeCycleManager 的 saveObjects 方法进行提交。

问. [b]JAXR 信息模型中的 Classification 的作用是什么?在所有 API 中都没有用到过它。 [/b]

答. Classification 用于对 RegistryObject 进行分类。可根据 RegistryObject 定义一个 Classification,并使用 GenericLifeCycleManager 的 saveObjects 方法提交该分类。

问. [b]为何 JAXR 是一个抽象 API,并且没有像 UDDI 或 ebXML 那样针对特定的注册项。[/b]

答. 抽象 JAXR API 可以让开发人员编写注册项客户端程序,这些程序是跨越多个目标注册项可移植的。这与 Java 的“一次编写,到处运行”(Write Once, Run Anywhere)的理念是一致的。它还提供了超越注册项本身功能的增值能力。例如,一个非 JAXR 的 UDDI 用户不具备分类浏览和分类智能查询的能力,而 JAXR UDDI 用户具备这些能力。

问. [b]为什么 JAXP API 不使用 UDDI 的术语和概念? [/b]

答. JAXR API 不针对 UDDI 或其他任何一种注册规范。它是一种涵盖多种规范的抽象 API。它可让开发人员在使用 Web 服务注册项和/或知识库之间做出选择。当 UDDI 适用于 JAXR 信息模型时(例如,Service、ServiceBinding 以及 BusinessQueryManager 和 BusinessLifeCycleManager 中的方法名),JAXR API 使用 UDDI 术语和概念。

问. [b]为什么 JAXR 信息模型使用 ebXML Registry Information Model 作为基础,而不采用 UDDI 数据结构? [/b]

答. JAXR API 用于支持多注册项。 ebXML Registry Information Model 比 UDDI 数据结构更通用且更易于扩展。出于这种特点,可以将 ebXML Registry Information Model 进行扩展,来满足 UDDI 和其他注册项的需要。

问. [b]为什么没有完整地开发 JAXR 信息模型? [/b]

答. 信息模型的开发需要很长时间。从现有信息模型出发对其进行改进是很容易的。

回到页首



[b]Java API for XML-Based RPC(JAX-RPC) [/b]

问题. [b]什么是 Java API for XML-Based RPC(JAX-RPC)? [/b]

答. Java API for XML-Based RPC(JAX-RPC)使得 Java 技术开发人员使用基于 XML 的 RPC 功能构建 Web 应用程序和 Web 服务,此功能遵循 SOAP(简单对象访问协议,Simple Object Access Protocol)1.1 规范。

问题. [b]JAX-RPC 如何使用 SOAP ? [/b]

答. 请参考 JSR-101

问题. [b]什么是 RPC? [/b]

答. RPC 代表远程过程调用(remote procedure call),它是能使客户端执行其他系统中程序的一种机制。RPC 机制常用于分布式客户端/服务器模型。服务器将服务定义为一系列过程,可供远程客户端调用。

问题. [b]XML 如何与 RPC 相关联? [/b]

答. 远程过程调用是由基于 XML 的协议来表示的,比如 SOAP 。除了定义信封结构和编码规则之外,SOAP 规范还定义了远程过程调用和响应的表示惯例。

问题. [b]对于 Web 服务,JAX-RPC 必须做哪些工作? [/b]

答. 一个基于 XML 的 RPC 服务器应用程序可以定义、描述和导出一个的 Web 服务,如同基于 RPC 的服务一样。WSDL(Web 服务描述语言,Web Service Description Language)定义了一种 XML 格式,将服务描述为一组消息操作的端点集合。通过使用 JAX-RPC API ,开发人员可以用 WSDL 描述来实现客户端和服务。

问题. [b]客户端与 JAX-RPC 服务之间采用什么交互模式? [/b]

答. 有以下三种不同的模式:

同步请求-响应(Synchronous Request-Response):客户端调用远程程序并阻塞,直到它收到一个返回值或异常。 单向 RPC(One-Way RPC):客户端调用远程过程,但自身不阻塞或等待直到收到一个返回值。JAX-RPC 客户端的运行时系统可能会抛出异常。 非阻塞 RPC 调用(Non-Blocking RPC Invocation):客户端调用远程过程,并继续处理同一个线程的内容而不等待返回值。此后,客户端通过阻塞来接受返回值或轮询返回值,以此来处理远程方法的返回。
问题. [b]远程方法调用或响应能否传送服务内容信息? [/b]

答. 是的。例如它可能会传送唯一的事务标识符或数字签名。

问题. [b]为什么 xrpcc 没有生成 WSDL 文件? [/b]

答. xrpcc 工具实际上可以生成 WSDL 文件,但由于设计失误,如果不指定 –keep 选项,该文件会同源文件一起被删除。您可以使用 –keep 选项让 xrpcc 不删除 WSDL 或 .java 源文件。如果您使用 –s sourcepath 选项,所有源文件将被放置在 sourcepath 目录中,然后您可以很容易地删除它们。 WSDL 文件将被放置在当前目录或由 –d 选项指定的目录中。

回到页首



[b]Java 2 Platform, Enterprise Edition[/b]

问题. Java 2 Platform, Enterprise Edition [b]是否能使用 XML ? [/b]

答. Java 2 Platform, Enterprise Edition (J2EE) 促进了在松耦合商业系统之间使用 XML 进行数据消息传递。J2EE 参考实现包括了 Java API for XML Parsing(JAXP) 。

JavaServer Pages(JSP)可以在多层服务器之间或服务器与客户端之间生成和使用 XML 。Java 消息服务(Java Message Service, JMS)提供了用于 XML 数据消息的异步传送机制。Enterprise JavaBeans (Enterprise JavaBeans ,EJB) 提供一种健壮的同步传输机制,允许用 XML 标签调用业务服务对象。EJB 还使用 XML 描述它的部署属性,例如事务和安全。

问题. [b]是否能用 JSP 页面生成动态的 XML 文档? [/b]

答. JSP 页面能够生成 XML 页面。 XML 页面可以用 JSP 生成,包括用于生成文档动态部分的那些元素。 JSP 规范包括强大的标签扩展机制,可以用来执行基于 XML 的操作,例如将 XSLT 转换应用于一个 XML 文档。

回到页首
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: