XFire 框架中,我们有两种方式将 POJO 发布成 Web 服务:
- 一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布;
- 另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;
下面的章节中我们将学习使用第一种方式来完成 POJO 的 Web 服务发布。我们将使用经典的 ”Hello World!”例子来演示将 POJO 发布成 Web 服务所需要的步骤,不过我们不再是简单的访问一个 Java 方法来输出 ”Hello World!”字符串,而是转为在 SOA 环境下实现:Web 服务客户端通过访问服务器端发布成 Web 服务的 POJO 获得返回的 ”Hello World!”字符串后输出到客户端的控制台上。
将 POJO 发布成 Web 服务的基本步骤如下:
- 创建 Web 服务接口,声明该 Web 服务对外暴露的接口;
- 创建 Web 服务实现类,为 Web 服务接口提供实现;
- 修改 XFire 框架的服务发布文件 ---- services.xml,将 POJO 发布成 Web 服务。
下面我们通过创建 ”Hello World!”例子来具体说明如何实现这三个步骤。
1.创建 Web 服务接口 ---- HelloWorldService
要将 POJO 发布成 Web 服务,首先需要创建 Web 服务接口,在接口中声明该 Web 服务需要对外暴露的接口。
我们根据需要创建 Web 服务接口 ” HelloWorldService”,在其中声明一个 ”sayHello”方法,该方法返回 ”String ”类型的内容。” HelloWorldService”接口对应的 Java 文件代码如 清单 1-3。
清单 1-3 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldService.java
package org.vivianj.xfire.pojo;
/**
* HelloWorldService 中声明需要发布成 Web 服务的所有 Java 方法
* HelloWorldService 作为Web服务接口
*/
public interface HelloWorldService {
/**
* sayHello 方法声明了 Web 服务对外暴露的接口
*
* @return 返回给客户端的字符串
*/
public String sayHello();
}
2.创建 Web 服务实现类 ”HelloWorldServiceImpl”
创建 Web 服务实现类 ”HelloWorldServiceImpl”,它继承 ”1、创建Web服务接口 ---- HelloWorldService” 中创建的 HelloWorldService 接口,并且为它声明的 ”sayHello”方法提供具体实现: 返回字符串”Hello World!”。 ”HelloWorldServiceImpl”类对应的 Java 文件代码如 清单 1-4。
清单 1-4 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldServiceImpl.java
package org.vivianj.xfire.pojo;
/**
* HelloWorldServiceImpl 中为 Web 服务接口中声明的所有 Java 方法提供具体实现
* HelloWorldServiceImpl 作为 Web 服务的实现类
*/
public class HelloWorldServiceImpl implements HelloWorldService {
/*
* sayHello 方法为 HelloWorldService 服务接口定义的 sayHello 方法提供具体实现
*
* @see org.vivianj.XFire.pojo.HelloWorldService#sayHelloToXFire()
*/
public String sayHello() {
return "Hello World!";
}
}
3.修改 services.xml,将 POJO 发布成 Web 服务
我们可以在 WEB-INF\classes\META-INF\XFire\services.xml 文件中的 <beans …> 和 </beans> 元素中间加入如下的 xml 内容将上面创建的 HelloWorldService 发布成 Web 服务。
<service> <name>HelloWorldService</name> <namespace>http://vivianj.org/HelloWorldService</namespace> <serviceClass> org.vivianj.xfire.pojo.HelloWorldService </serviceClass> <implementationClass> org.vivianj.xfire.pojo.HelloWorldServiceImpl </implementationClass> </service>
其中各元素的功能如下:
- service
service 标签和它所包含的 xml 内容为发布成 Web 服务的 POJO 提供完整的描述。
- name
Web 服务被发布时所采用的唯一名称。
- namespace
Web 服务发布时所使用的命名空间。
- serviceClass
Web 服务接口类的全名,包括包名和类名。
- implemetationClass
Web 服务实现类的全名,包括包名和类名。
更多 service 元素的子元素和它们的用法请参考 XFire 站点。
通过上面的三个步骤,我们已经将新创建的HelloWorldService发布成了Web服务,我们可以使用下面的步骤测试一下创建的Web服务是否能够正常运行:
- 编译上面的步骤中创建的 Java 接口和类;
- 启动 TOMCAT 服务器。
- 等 TOMCAT 服务器完全启动后,打开浏览器,在地址栏中输入 http://localhost:8080/XFire/services/HelloWorldService?wsdl。
其中 HelloWorldServcie 是配置文件中 service\name 元素所定义的内容,”wsdl”参数表示查看该 Web 服务的 WSDL(Web服务描述语言)文件。
如果浏览器中出现如下图所示类似的内容,表示 Web 服务发布成功,我们可以编写客户端访问该 Web 服务从服务器获取返回字符串,本文下载资源中提供的下载文件中包含有可供参考的客户端类 org.vivianj.xfire.pojo.client.HelloWorldServiceClient。
如果浏览器中出现错误提示,请按照上面的步骤和说明检查已经完成的开发、配置过程是否完全正确。
本文中作者首先讲解了 XFire 框架的主要特性,XFire 框架的运行环境以及基于 XFire 框架开发 SOA 应用的基本步骤,并且借助于 SOA 环境下的 ”Hello World!”例子,详细的讲解和演示了如何基于 XFire 框架、经过简单的开发、配置步骤就将一个 POJO 类中包含的方法发布成Web服务。从 ”Hello World!”例子实现的过程中,我们可以发现 XFire 框架最大化的发挥了 POJO 的作用,减少了 SOA 实施时对框架本身的依赖,降低了 SOA 实施的难度,企业实施 SOA 时并不需要增加太多的投入就可以实现目标。