WebServicesforJ2EE,版本1.0草案版本0.91—2002年8月19日JSR109:ImplementingEnterpriseWebServices摘要JSR109,即WebServicesforJ2EE定义了在J2EE1.3或J2EE1.4应用程序服务器中如何支持Web服务。具体地说,WebServicesforJ2EE定义了客户机模型、部署模型和运行时模型,从而使Web服务客户机和实现可以从一个J2EE供应商实现移植到另一个J2EE供应商实现。WebServicesforJ2EE基于JAX-RPC(JSR101)进行构建,以提供客户机编程模型。该客户机模型允许Web服务客户机(Java的或非Java的,在J2EE之中或在J2EE之外)访问部署在支持JSR109的J2EE应用程序服务器中的Web服务。它还允许J2EE组件通过使用J2EE编程模型调用Web服务(Java的或非Java的,在J2EE之中或在J2EE之外)。WebServicesforJ2EE部署模型定义了WSDL文档的处理方法和WSDL文档的服务和XML信息模型到J2EE组件的映射,包括EJB容器中的无状态会话Bean和Servlet容器中的Servlet和JAX-RPC端点。它还定义了对JAX-RPC处理程序的部署和运行时支持。WebServicesforJ2EE还通过定义J2EE应用程序服务器应如何使WSDL文档可以通过URL获得定义了对服务发布的支持。为您的Web服务支持与J2EE应用程序服务器一起使用JSR109能确保您Web服务实现和客户机的可移植性。本文档的状态提议的最终草案本文档是JSR109的公开最终草案版本。它处于JSR规范在Java社区过程(JavaCommunityProcess)中的倒数第二个阶段。这表明specificationlead和专家组认为该草案已经完成。对提议的最终草案的修订根据在创建参考实现(ReferenceImplementation)和技术兼容性工具(TechnologyCompatibilityKit,TCK)时出现的问题进行。本文档不是JSR109规范的最终发行版。当本文档、参考实现和技术兼容性工具都完成时,本规范才会成为最终发行版。目录1.前言1.1.目标读者1.2.致谢1.3.规范结构1.4.文档约定2.目标2.1.客户机模型目标2.2.服务开发目标2.3.服务部署目标2.4.服务发布目标2.5.Web服务注册中心目标3.概述3.1.Web服务体系结构概述3.2.Web服务3.3.WebServicesforJ2EE概述3.3.1.Web服务组件3.3.2.Web服务容器3.4.平台角色3.5.可移植性3.6.标准服务3.6.1.JAX-RPC3.7.互操作性3.8.作用域3.8.1.作用域3.8.2.作用域之外3.9.Web服务客户机视图3.10.Web服务服务器视图4.客户机编程模型4.1.概念4.2.规范4.2.1.服务查找4.2.2.服务接口4.2.3.端口存根和动态代理4.2.4.JAX_RPC属性4.2.5.JAX-RPC定制序列化程序/反序列化程序4.2.6.打包5.服务器编程模型5.1.目标5.2.概念5.3.端口组件模型规范5.3.1.服务端点接口5.3.2.服务实现Bean5.3.3.服务实现Bean生命周期5.3.4.JAX-RPC定制序列化程序/反序列化程序5.4.打包5.4.1.EJB模块打包5.4.2.Web应用程序模块打包5.4.3.EAR文件中的装配5.5.事务5.6.容器提供者职责6.处理程序6.1.概念6.2.规范6.2.1.适用情况6.2.2.编程模型6.2.3.开发者职责6.2.4.容器提供者职责6.3.打包6.4.对象交互图6.4.1.客户机Web服务方法访问6.4.2.EJBWeb服务方法调用7.部署描述符7.1.Web服务部署描述符7.1.1.概述7.1.2.开发者职责7.1.3.装配者职责7.1.4.部署者职责7.1.5.Web服务部署描述符DTD7.2.Web服务客户机部署描述符7.2.1.概述7.2.2.开发者职责7.2.3.装配者职责7.2.4.部署者职责7.2.5.webservicesclient.xmlDTD7.3.JAX-RPC映射部署描述符7.3.1.概述7.3.2.开发者职责7.3.3.装配者职责7.3.4.部署者职责7.3.5.JAX-RPC映射DTD8.部署8.1.概述8.2.容器提供者要求8.2.1.部署构件8.2.2.生成Web服务实现类8.2.3.生成部署的WSDL8.2.4.发布部署的WSDL8.2.5.服务和生成的服务接口实现8.2.6.静态存根生成8.2.7.类型映射8.2.8.映射要求8.2.9.部署失败的情况8.3.部署者职责9.安全性9.1.概念9.1.1.认证9.1.2.授权9.1.3.完整性和机密性9.1.4.审计9.1.5.不可抵赖性9.2.目标9.2.1.假设9.3.规范9.3.1.认证9.3.2.授权9.3.3.完整性和机密性10.附录10.1.附录A.与其它Java标准的关系10.2.附录B.参考资料10.3.附录C.版本历史10.3.1.附录C.1.版本0.810.3.2.附录C.2.版本0.710.3.3.附录C.3.版本0.610.3.4.附录C.4.版本0.510.3.5.附录C.5.版本0.4专家组草案1.前言本规范定义了WebServicesforJ2EE体系结构。这个服务体系结构利用J2EE组件体系结构提供了一种客户机和服务器编程模式(可在应用程序服务器之间移植,并可在服务器间进行互操作),从而提供了一种可伸缩的安全环境,但仍然为J2EE开发者所熟知。1.1.目标读者此规范旨在由以下读者使用:为遵循此规范的Web服务实现支持的J2EE供应商将部署到J2EE应用程序服务器的Web服务实现的开发者将部署到J2EE应用程序服务器的Web服务客户机的开发者访问部署到J2EE应用程序服务器的Web服务的Web服务客户机的开发者此规范假定其读者熟悉J2EE平台和规范。它还假定读者熟悉Web服务,尤其是[JAX-RPC]规范和WSDL文档。1.2.致谢此规范的原始思想建立在IBM成员DonaldF.Ferguson的设想之上。它经过了业界范围内的专家小组的修正。专家小组的成员包括来自以下公司的积极的代表:IBM、Sun、Oracle、BEA、SonicSoftware、SAP、HP、Silverstream和IONA。我们要感谢这些公司以及JSR109专家小组的其它成员:EDS、Macromedia、Interwoven、RationalSoftware、Developmentor、interKeel、Borland、CiscoSystems、ATG、WebGain、Sybase、Motorola和WebMethods。JSR109专家小组必须与其它JSR专家小组达成一致,从而为WebServiceforJ2EE定义一个一致的编程模型。我们特别要感谢RahulSharma和JSR101(JAX-RPC)专家小组、FarukhNajmi和JSR093(JAX-R)专家小组,还有LindaG.DeMichiel和JSR153(EJB2.1)专家小组。1.3.规范结构此规范的下面两章内容概括了J2EE环境中的Web服务支持的需求及概念性体系结构。J2EE中的Web服务的每个主要的集成点,如客户机模型、服务器模型、部署模型、WSDL绑定以及安全,都有自己的章节。其中每一章都由两个主题构成:概念和规范。概念部分将讨论如何使用Web服务、相关问题、注意事项以及支持的情况。规范部分具有标准的形式,定义了该规范的实现者必须支持什么。1.4.文档约定为了一致起见,此规范将沿用由[EJB]规范所使用的文档约定。此规范中的说明性信息将用非固定字体表示。包含描述性信息的段落(如描述典型应用的注释,或文本内容需要与说明性规范区分开来的注释)将使用这种表示强调的字体。代码示例将使用这种固定字体。本文当中的关键词“必须(MUST)”、“绝不可以(MUSTNOT)”、“需要的(REQUIRED)”、“将(SHALL)”、“将不(SHALLNOT)”、“应该(SHOULD)”、“不应该(SHOULDNOT)”、“推荐(RECOMMENDED)”、“可以(MAY)”及“可选的(OPTIONAL)”的解释应依照RFC2119中的描述。2.目标这一部分列出了此规范的高级目标。建立在不断发展的Web服务业界标准(特别是WSDL1.1和SOAP1.1)的基础之上。利用已有的J2EE1.3技术。确保程序员能够实现和打包正确部署到遵循J2EE1.3和本规范的应用程序服务器上的Web服务。确保遵循本规范的供应商实现之间可互操作,也就是说,在一个供应商的实现上的Web服务必须能够与在另一个供应商实现上执行的Web服务进行交互。定义一个支持J2EE中Web服务所需的最小集合,该集合的元素包括新的概念、接口、文件格式等等。清晰并简洁地定义J2EE应用程序服务器供应商在J2EE1.3之上为遵循本规范需要提供的功能。定义本规范所需的角色、这些角色所实现的功能以及它们与J2EE平台角色的对应关系。定义WebServicesforJ2EE产品提供者为支持这些角色而必须提供的功能。支持一个用于定义新的Web服务并将其部署到J2EE应用程序服务器的简单的模型。本规范与J2EE1.4之间的关系在10.1.附录A.与其它Java标准的关系中有所定义。2.1.客户机模型目标客户机编程模型应该与JAX-RPC所定义的客户机编程模型一致并兼容。客户机编程模型的其它目标是要确保:程序员可以实现可能驻留在J2EE容器(例如使用Web服务的EJB)遵循本规范的Web服务客户机应用程序,或者J2EE客户机容器可以调用在WebServicesforJ2EE容器中运行的Web服务。遵循本规范的客户机应用程序能够通过HTTP1.1或HTTPSSOAP绑定调用任何基于SOAP1.1的Web服务。使用其它客户机环境(如Java2标准版环境)的程序员能够调用在WebServicesforJ2EE容器中运行的Web服务。使用Java之外的语言的程序员必须能够实现遵循SOAP1.1的应用程序(此类应用程序可以使用遵循本规范的Web服务)。支持第4章客户机编程模型中描述的客户机开发情况。客户机开发者必须能够不必清楚服务实现是如何完成的。JSR172定义的Java2微型版客户机应该能够使用WSDL和JAX-RPC运行时中发布的传输标准与WebServicesforJ2EE应用程序进行互操作。2.2.服务开发目标服务开发模型定义了如何开发Web服务实现并将其部署到已有的J2EE容器中,包括下面几个特定的目标:如何实现Web服务在Web服务客户机看来应该是透明的。客户机应该不需了解Web服务是否被部署到J2EE或非J2EE环境中。由于Web服务实现必须被部署到J2EE容器中,所以实现服务的类必须遵循某个定义的需求,以确保它不会有损应用程序服务器的完整性。JAX-RPC定义了三类服务器端运行时,即基于J2SE的JAX-RPC运行时、基于Servlet容器的JAX-RPC运行时以及基于J2EE容器的JAX-RPC运行时。本规范定义了基于J2EE容器(Web和EJB)的运行时,因为它与[JAX-RPC]规范所定义的基于Servlet容器的模型一致。支持将SOAP1.1请求映射和分派到J2EE无状态会话Bean上的方法。支持将SOAP1.1请求映射和分派到Web容器中的JAX-RPC服务端点类上的方法。2.3.服务部署目标Web服务部署是声明性的。我们通过将J2EE1.3模型扩展到支持部署描述符合EAR文件格式实现这一点。不过,这些变化都是最小的。已有的J2EE1.3环境上能够支持Web服务部署。部署需要服务能够由WSDL表示。部署还需要WSD