扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
JSR-181 引入的编程模型建立在 J2EE 1.4 服务器模型和 JAX-RPC 的基础之上,简化了开发人员需要维护的 Web 服务构件数量。根据服务实现的起点不同,JSR-181 可以大幅度减少为了实现 Java Web 服务所必须维护的构件的数量。该规范描述了开始 Web 服务开发的若干不同方法以及 Web 服务注释功能如何帮助进行开发工作。Web 服务入门编程模型如下所述。
从 Java 入手
从 Java 入手将可能是 Java Web 服务创建者最常采用的方法,同时也是该规范唯一要求 的编程模型。此编程模型允许开发人员创建实现类,并为所需 Web 服务功能添加注释。其他 Web 服务构件(WSDL、模式和部署描述符)将自动由 JSR-181 处理器从带注释的 Java 类生成。WSDL 的缺省生成将遵循 JAX-RPC 1.1 所定义的 Java 到 XML/WSDL 的映射,但开发人员可以通过使用 Web 服务注释来自定义 WSDL。
从 WSDL 入手
从 WSDL 入手的编程模型用于生成服务端点接口以及表示模式定义的类和 WSDL 内定义的各个消息部分。 在此模型中,JSR-181 注释直接在实现文件中使用——而实现文件必须由开发人员创建,以定义 WSDL 服务契约未确定的细节(如绑定或服务位置信息)。
从 WSDL 和 Java 同时入手
从 WSDL 和 Java 同时入手的编程模型用于将实现映射到 WSDL 中定义的接口契约。支持此编程模型时,JSR-181 处理器必须 在实现文件中描述的注释与 WSDL 中定义的契约不匹配时提供反馈信息。
JSR-181 处理器
JSR-181 规范对 Web 服务容器内的 JSR-181 处理器的实现细节的规定仍然十分开放,唯一的要求就是处理器能产生可运行的 Web 服务。这个开放性的实际结果就是,JSR 实现开始在市场上出现。开发人员将来可以使用多种不同类型的处理器来实现从 Java 入手的编程模型。例如,一个模型可以就是产生符合 J2EE 1.4 的 Web 服务构件的预处理器。在这种情况下,预处理器可能产生一个配置文件和 webservices.xml 部署文件,并调用 Java2WSDL 编译步骤。另一个实现可以提供拖放 Web 服务部署,会在运行时处理注释,以直接从 Web 应用程序中包含的类直接发布 Web 服务。
JSR-181 中的 Web 服务注释
如果继续构建之前的示例 Web 服务,我们可以使用 JSR-181 注释实现它,以帮助生成 J2EE 1.4 Web 服务构件。通过使用 JSR-181 处理器,我们前面的示例将不需要在开发时包含任何部署构件,可以从实现文件中的注释生成可行的 Web 服务。下面是 JSR-181 提供的一些注释的简单描述。有关 Web 服务注释的完整讨论,请参见“参考资料”部分提供的规范。
清单 6. WebService 注释
@WebService( name = "StatsWS", targetNamespace = "http://services.symmetrysolutions.com/statsws", serviceName = "StatsWS" ) |
WebService 注释(必需)位于 Java 文件中的类或接口声明之前。当 WebService 注释位于类声明前时,它将类标记为实现 Web 服务,除非使用 WebMethod 注释显式声明,或声明了 endpointInterface,否则所有公共方法都将成为 Web 服务接口的一部分。当 WebService 注释位于接口声明前时,它将接口标识为 Web 服务接口,接口内的所有方法都被视为 Web 服务端点的一部分,而不会考虑接口内的 WebMethod 注释。
清单 7. SOAPBinding 注释
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.ENCODED) |
SOAPBinding 注释(可选)位于 Java 文件内的类或接口声明前。SOAPBinding 注释允许开发人员控制 Web 服务在 SOAP 消息协议上的映射。
清单 8. WebMethod 注释
@WebMethod(operationName = "getAllStatistics") |
WebMethod 注释(可选)在方法级别声明,用于自定义作为 Web 服务操作公开的方法。在实现类中使用时,将允许开发人员限制将哪些方法作为 Web 服务公开、与操作关联的名称以及 SOAPAction 绑定。在接口文件中使用时,仅用于控制与操作关联的名称以及 SOAPAction 绑定。
清单 9. WebParam 注释
@WebParam(name = "category", mode="IN") |
WebParam 注释(可选)在方法内声明,用于自定义 Web 服务操作内的参数。WebParam 最常与 RPC 样式绑定一起使用,但也可以用于将元素名称的参数与采用 DOCUMENT 样式绑定的命名空间关联。
清单 10. WebResult 注释
@WebResult(name = "categoryList") |
WebResult 注释(可选)在方法级别声明,用于自定义 Web 服务操作的返回值。
从上面提到的列表中可以看出,使用 JSR-181 处理器部署 Web 服务可以大幅度减少基于 Java 的 Web 服务的开发和部署的工作量。此注释列表并不完整,但却代表了可能在典型部署中使用的最常见注释。我建议您阅读完整的 JSR-181 规范,以全面了解 Web 服务注释的所有功能。
使用 Web 服务注释
如果搜索支持 JSR-181 的 Web 应用程序容器,所得到的结果将非常有限。撰写本文时,只要极少数产品支持 JSR-181,包括 JBoss 4.0.4、BEA WebLogic 9.x 和 JSR-181 参考实现。为了测试带注释的 Java Web 服务,我建议执行以下步骤:
从前面的步骤可以看出,在 Web 容器内实现 JSR-181 处理器时,Java Web 服务部署可能简单到执行一次拖放操作即可完成。
正如前面所提到的,JSR-181 规范对 Web 容器中运行的处理器并没有任何特殊的要求。唯一的要求是,JSR-181 处理器完成工作后,将获得具有一致的 WSDL 契约的可部署 Web 服务。这个要求将很可能采用多种方式实现。第一个方法通过 JBoss 4.0.4 服务器进行了说明,即支持拖放部署。此方法并不会产生开发人员可用的任何部署描述符构件,但却是最简单的部署方法。在需要对部署描述符进行某些自定义的情况下,此方法可能行不通。在此情况下,继续采用前面所述的标准 J2EE 1.4 部署可能是最佳选择。
另一个部署方法就是采用集成开发环境(Integrated Development Environment,IDE)的外接程序组件或可以在构建过程中运行的 Ant 任务。(请参见上面有关部署 BEA WebLogic 的描述。)处理器外接程序可以在将产品打包为 war 文件前正确运行,并且将基于注释为 Web 服务生成服务器特定的部署描述符。Apache Beehive 项目好像正在开发这样的组件,在不久的将来可能会提供一个通用 JSR-181 实现。(请参见“参考资料”部分中有关 Apache Beehive 的信息。)通过使用这种实现方法,处理器将生成可允许开发人员进行进一步自定义的部署描述符。
Web Services MetaData (JSR-181) 无疑将使得构建和部署 Java Web 服务的工作比目前简单得多。开发人员将不必了解很多不同的部署描述符,还可能不必在部署时对 Web 应用程序进行修改。Web 服务注释是 Java 语言将如何发展的一个例子,它提供了应用程序体系结构设计和应用程序部署之间一个重要的联系。架构师可以描述接口的用途,而运行时平台能够将此转换为可部署的解决方案。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者