




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XFire 轻轻松松简简单单地地开开发发 Web Services mydeman 发表于 2006 09 24 20 15 52 作者 mydeman Shahid Ahmed 来源 javaworld 评论数 9 点击数 2 292 投票总得分 3 投票总人次 1 关键字 XFire Web Services 摘摘要要 XFire 是一个免费的开源 SOAP 框架 它不仅可以极大方便地实现这样一个环境 并且可以提供 许多 Web Services 规范中高级特征 这些特征在多数的商业或者开源工具都没有提供 你要恰 当的理解这些单词 great ease and simplicity 非常轻松和简单 你将会看到使用 XFire 创建 Web Services 是多么的简单 工工具具箱箱 本站收藏 美味书签 投票评分 发表评论 复制链接 将将你你的的 POJO 方方法法发发布布为为 Web Services 摘摘要要 问一下 Net 的开发者 开发 Web Services 有多困难 他们会被你的问题逗乐 他们会告诉你 所有步骤花费的时间不会超过一分钟 再问一下 Java 开发者 运气好的话你会碰到上面的回答 一般情况下 你会得到一个完全不同的答案 从 Web Services 引入到 Java 中至今已经 5 年了 然而它仍然被认为是一门较新的技术 一个主要的原因就是使用Java 实现 Web Servic es 太困难了 现在 随着新一代 Web Services 引擎 XFire 的发布 这种情况将会发生明显的 变化 使用 XFire 你可以把 Java 类方法发布为 Web Services 而不需要编写额外的代码 在 这篇文章中 你将会看到 XFire 使 Web Services 开发变得多么容易和简单 Web Services 使我们能够在网络上建立分布式系统 应用程序组件可以通过任何平台 任何语 言和任何方式访问 无论应用程序如何开发 使用了什么语言 以及运行在什么操作系统平台上 只要它作为 Web Service 并且为协同解决问题而设计 那么你的应用程序 以任何语言开发 或在任何平台上 都可以利用它的服务 这是 Web Service 的主要概念 为了实现 Web Services 的平台无关性和实现访问独立性 软件行业需要遵循一些作为标准的技 术 其中一些包括 XML 在 Web Services 环境中各层之间进行传递的默认数据格式 SOAP 封装和交换信息的默认协议 第一次被提出时 它是只取 Simple Object Access Protocol 简单对象访问协议 的首字母 但是现在 SOAP 更多被认为是一个特定的名词 以它 自己而命名 同样很多人认为这是用词不当 SOAP 实际上不是用来访问对象的 另外 它也不 再简单 WSDL Web Services Description Language Web Services 描述语言 描述 We b Services 的语言 尽管基于 XML 并且可以被人理解 WSDL 主要是由机器处理 由客户端程 序读取和理解 下面的高级层次图表 基于 WWW 协会发布的 Web Services Architecture Web Servic es 架构 文档 显示了这些技术在实际的工作环境中是如何发挥作用 这个流程图显示了 Web Services 中的核心技术是如何工作的 这里 Provider 是提供服务的应用程序组件 Requester 是使用服务的客户端程序 很多其他 技术也会参与到交互中 但是这个图只显示了在 Web Services 环境中必需的核心技术组件 XFire 是一个免费的开源 SOAP 框架 它不仅可以极大方便地实现这样一个环境 并且可以提供 许多 Web Services 规范中高级特征 这些特征在多数的商业或者开源工具都没有提供 你要恰 当的理解这些单词 great ease and simplicity 非常轻松和简单 你将会看到使用 XFire 创建 Web Services 是多么的简单 假如你的 Web 应用有一个 Java 类 并且你想把它的一个方法发布为 Web Services 当使用 XFire 时 你不需要编写一行额外的 Java 代码 只需要编辑发布描述符 然后你就会得到一个 Web Services 是的 它相当地简单 我们来看一个例子 版权声明 任何获得 Matrix 授权的网站 转载时请务必保留以下作者信息和链接 作者 Shahid Ahmed mydeman 原文 Matrix 6 11db 978f 43b3336b7e51 html 关键字 XFire Web Services 一一个个简简单单的的 Java 类类 我们的例子是一个银行业应用程序 服务器是运行在 J2SE1 4 2 07 下的 Apache Tomcat5 5 7 假定你已经了解如何使用 Java 编写 Web 应用程序 并知道应该如何把它部署到 Apache Tomcat 服务器上 我们的 Web 应用程序非常简单 它只做一件事 将资金从一个账户转到 另外一个账户上 一个普通的 Java 类 BankingService 包含了一个叫做 transferFunds 的方 法来为我们完成这项工作 它需要四个输入参数 1 String fromAccount 2 String toAccount 3 double amount 4 String currency 代码如下 package com mybank xfire example import java text NumberFormat import java text DecimalFormat XFire WebServices sample implementation class public class BankingService implements IBankingService Default constructor public BankingService Transfers fund from one account to another public String transferFunds String fromAccount String toAccount double amount String currency String statusMessage Call business objects and other components to get the job done Then create a status message and return try NumberFormat formatter new DecimalFormat 00 statusMessage COMPLETED currency formatter format amoun t was successfully transferred from A C fromAccount to A C toAccount catch Exception e statusMessage BankingService transferFunds EXCEPTION e toStri ng return statusMessage 在这里你看到了什么异常的东西了吗 或许没有 除了默认的构造函数 类型是public 这是 必须的 否则 XFire 不能够初始化这个类 因为使用接口的设计是一个好的实践 所以我们的 Java 类也实现了一个称为 IBankingServic e 的接口 代码十分简单 package com mybank xfire example public interface IBankingService public String transferFunds String fromAccount String toAccount double amount String currency 在实际实现中 这样一个方法可能包括各种类型的复杂调用 查询和处理操作 但是我们的示例 代码已经最小化了 以至于我们可以集中精力在主要目标上 把这个方法发布为Web Service s 你可以看到 BankingService 是一个普通的 Java 类 没有任何代码告诉我们它将会在 Web S ervices 中使用 好的 这里我们不需要增加任何东西 我们所有的工作都在部署描述符里完成 Web 应应用用的的部部署署描描述述符符 在 Java 中 Web 应用程序通常需要至少一个部署描述符 叫做 web xml 对其进行配置 XF ire 本身是一个基于 servlet 的应用程序 因此 我们需要增加必要的引用到描述符文件中 然后 我们还必须配置将要创建的 Web Services 我们使用一个称为 services xml 的新文件来完成 这件事 web xml 首先 修改 web xml 我们需要增加下面的 XFire servlet 相关的条目 XFireServlet XFire Servlet org codehaus xfire transport http XfireConfigurableServlet XFireServlet servlet XFireServlet XFireServlet services services xml 现在我们不得不说一下我们的 Web Services 的由什么组成的了 这由一个叫做 services xml 的文件完成 它存放在 META INF xfire 目录下 而这整个目录放在 WEB INF classes 文件夹 中 它在 Web 应用程序的标准类路径中 这里是 services xml 中的基本配置条目 Banking mybank com mybank xfire example IBankingService com mybank xfire example BankingService 让我们看看这里都包含了什么内容 Web Services 的定义包含在元素中 它还含 有一些子元素 第一个子元素是 它可以是你提供任何的合法名字 这将会被客户端程 序和其它需要定位你的服务的组件用到 例如 在服务准备好以后 你将在浏览器上使用这个名 字来查看 WSDL 下一个子元素是 任何合法的 XML 名字都是可以的 用来唯一 标识你的服务的各个参数 元素包含了 Java 类的名字 它指定了方法签名 在我们的例子中 它是接口 IBankingService 如果 Java 类没有实现任何接口 你就需要把类的名字放在这里 在你的 J ava 类或者接口中可能有几个方法 只需要一个入口把它们全部发布为Web Services 保存了实现方法的 Java 类名 这是一个可选元素 如果上一个元素 包含了一个接口 那么相应的实现类必须在这里指定 就是这样 我们的 Web Services 配置完成了 XFire 和和其其它它类类库库 现在是最后一步了 需要得到所有必需的类库 我们怎样得到它们呢 去XFire 网站 下载 xfir e distribution 1 0 zip 然后解压到一个本地文件夹 复制下面的 jar 文件和它的库文件夹到 WEB INF lib 中 activation 1 0 2 jar commons codec 1 3 jar commons httpclient 3 0 jar commons logging 1 0 4 jar jaxen 1 1 beta 8 jar jdom 1 0 jar log4j 1 2 x jar mail 1 3 3 01 jar spring 1 2 x jar stax api 1 0 jar wsdl4j 1 5 2 jar wstx asl 2 9 jar xbean 2 1 0 jar xbean spring 2 2 jar xfire all 1 0 jar XmlSchema 1 0 jar 一切妥当 我们来部署和启动应用程序 为了部署示例应用 只需要复制websvc war 到 Apac he Tomcat 的 webapps 文件夹中 再等待几秒钟 它将会自动启动 这个应用的全部源代码也 包含在这个 war 文件中 我们的程序已经准备作为一个 Web Service 了 我我们们如如何何知知道道 Web Service 正正在在工工作作呢呢 为了了解 Web Service 是否正在工作 我们需要测试 首先 我们测试来看 WSDL 是否可用 我们在浏览器中输入 URL 哪个 URL 因为我们的应用程序的 war 文件是 websvc war 并 且在 services xml 中给出的服务名是 Banking WSDL 的 URL 应该是 http localhost 8 080 websvc services Banking wsdl 请注意 URL 的第一部分 例如 http localhost 8080 可能会根据你的应用服务器不同而 不同 无论怎样 当你输入 URL 后 将会看到一个 XML 文档 它的根元素是 这个文档叫做服务的 WSDL 如果你看到了 这就是你的应用作为 Web Service 已经可 用的第一个证明 但是这个测试是不够的 可能会发生这种情况 可以看到 WSDL 但是从客户端程序可能会访问 不到服务 因此为了核实服务是否可以访问了 我们必须使用一个客户端进行服务的实际调用来 进行一个真正的测试 开开发发一一个个客客户户端端 你可以使用任何的 SOAP 工具创建客户端 例如 Net 或者 Apache Axis 有很多种方法 使 用从 WSDL 产生的 stubs 使用动态代理 等等 在例子中 我们使用一个动态代理 以一个简 单的 Servlet 形式 叫做 WsClient java 为了保持代码两最小 所有在屏幕显示的元素都放在 了 doGet 方法中 对 Web Service 的实际调用由 callWebService 方法完成 它相当地简 单 和下面的类似 Call the Web service public String callWebService String fromAccount String toAccount double amount String currency throws MalformedURLException Exception Create a metadata of the service Service serviceModel new ObjectServiceFactory create IBankingService cla ss log debug callSoapServiceLocal got service model Create a proxy for the deployed service XFire xfire XFireFactory newInstance getXFire XFireProxyFactory factory new XFireProxyFactory xfire String serviceUrl http localhost 8080 websvc services Banking IBankingService client null try client IBankingService factory create serviceModel serviceUrl catch MalformedURLException e log error WsClient callWebService EXCEPTION e toString Invoke the service String serviceResponse try serviceResponse client transferFunds fromAccount toAccount amount c urrency catch Exception e log error WsClient callWebService EXCEPTION e toString serviceResponse e toString log debug WsClient callWebService status serviceResponse Return the response return serviceResponse 这个代码是如何工作的呢 我来解释一下 首先 我们创建一个服务模型 它包含服务的说明 换句话说 就是服务的元数据 我们使用 XFire 的 ObjectServiceFactory 从 IBankingSer vice class 接口创建这个模型 接着 为 XFire 获得一个代理工厂对象 它包含了常规的代码 也相当地简单和易懂 这一步中 没有任何特定应用的东西 从这个 proxyFactory 使用服务模型和服务端点 URL 用来获得 WSDL 我们可以得到一个服务的本地代理 就是它了 这个代理就是实际的客户端 现在 我们可以调用它的transferFunds 方法来得到 我们需要的 Web Service 一旦示例应用发布并启动 就可以尝试 servlet URL http localhost 8080 websvc ws 这个 Servlet 使用默认参数来调用 Web Service 和显示接收到的响应 页面的最后两行应该读 取 Response Received COMPLETED CDN 500 00 was successfully transferred from A C 11111 0123 4 to A C 99999 05678 现在你可以确定 Web Service 已经发布并且在运行中了 为了尝试不同的输入值 你可以使用完整的 URL 例如 http localhost 8080 websvc ws from 11 2345 替换为 String serviceUrl xfire local Banking 你会看到性能上的明显提高 因为它绕过了整个网络层 局局限限性性 XFire 有些重要的局限性你应该清楚 开发 Web Services 的好的实践是从 WSDL 开始 大部分的 SOAP 引擎提供了从 WSDL 生 成服务 stub 的工具 XFire 也提供了这样一个工具 但是它是基于注释 annotations based 的 因此需要 J2SE5 0 对于仍坚持使用 J2SE1 4 x 的人来说 它不是一个令人拍手叫好的 工具 因为我们有很多其他方式来编写客户端 一个就是文章中演示的方式 附件支持 它将会包含在未来发行的版本中 易于学习的用户向导 XFire 团队在这个方面还有很多工作需要做 结结论论 Java 当前的趋势是简化技术的使用 因此 我们正看到一波基于 POJO 的开发成就 同时 面 向服务架构 SOA Services oriented architecture 和 Web Services 已经变成了当前行 业的热点话题 XFire 正是在这种情况下产生的 它能够使 POJO 发布为最少的 Web Serv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论