- 在 %TOMCAT_HOME%/webapps 目录下创建新的 Web 应用目录 “XFire”
[注] 其中的 %TOMCAT_HOME% 指向 TOMCAT 的安装目录。
- 在 ”XFire”目录下创建 ”WEB-INF”目录、
- 在 ” WEB-INF”目录下创建 ”lib”目录和 ”classes”目录
- 在 ” WEB-INF”目录下创建 Web 应用描述文件 ”web.xml”。
1、 <?xml version="1.0" encoding="ISO-8859-1"?> 2、 <web-app xmlns="http://java.sun.com/xml/ns/j2ee" 3、 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4、 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 5、 version="2.4"> 6、 7、 <display-name>XFire实例</display-name> 8、 <description> 9、 基于XFire框架发布Web服务的例子 10、 </description> 11、 12、 </web-app> |
拷贝 %XFIRE_HOME%/lib 目录下所有文件到”lib”目录下,将 %XFIRE_HOME%/XFire-all-1.2.6.jar 文件也拷贝到 ”lib”目录下。将 xalan 安装包中的所有 jar 文件和所需要的支持 jar 文件拷贝到相同的 ”lib”目录下。
[注] 为了减少拷贝的 jar 文件的数目,开发者可以根据项目的需要选择需要拷贝的 jar 文件,而不是全部拷贝,如何根据需要选择拷贝合适的类包文件请访问
修改 web.xml 文件,在其中增加如下 Servlet 定义内容。
1、 <servlet> 2、 <servlet-name>XFireServlet</servlet-name> 3、 <display-name>XFire Servlet</display-name> 4、 <servlet-class> 5、 org.codehaus.xfire.transport.http.XFireConfigurableServlet 6、 </servlet-class> 7、 </servlet> 8、 9、 <servlet-mapping> 10、 <servlet-name>XFireServlet</servlet-name> 11、 <url-pattern>/servlet/XFireServlet/*</url-pattern> 12、 </servlet-mapping> 13、 14、 <servlet-mapping> 15、 <servlet-name>XFireServlet</servlet-name> 16、 <url-pattern>/services/*</url-pattern> 17、 </servlet-mapping> |
4、创建 XFire 框架的服务发布文件 services.xml
- 在创建的 classes 目录下新建目录 ”META-INF\xfire”;
- 在步骤 a) 中新建的 ”xfire”文件目录下创建新文件 services.xml,文件的默认内容如
清单 1-2 WEB-INF\classes\META-INF\xfire\services.xml
1、 <beans xmlns="http://XFire.codehaus.org/config/1.0"> 2、 </beans> |
|
|
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 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldService.java
1.package org.vivianj.xfire.pojo; 2. 3. /** 4. * HelloWorldService 中声明需要发布成 Web 服务的所有 Java 方法 5. * HelloWorldService 作为Web服务接口 6. */ 7. public interface HelloWorldService { 8. /** 9. * sayHello 方法声明了 Web 服务对外暴露的接口 10. * 11. * @return 返回给客户端的字符串 12. */ 13. public String sayHello(); 14.} |
2.创建 Web 服务实现类 ”HelloWorldServiceImpl”
创建 Web 服务实现类 ”HelloWorldServiceImpl”,它继承HelloWorldService 接口,并且为它声明的 ”sayHello”方法提供具体实现: 返回字符串”Hello World!”。 ”HelloWorldServiceImpl”类对应的 Java 文件代码如下
清单 1-4 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldServiceImpl.java
1.package org.vivianj.xfire.pojo; 2. 3./** 4. * HelloWorldServiceImpl 中为 Web 服务接口中声明的所有 Java 方法提供具体实现 5. * HelloWorldServiceImpl 作为 Web 服务的实现类 6. */ 7.public class HelloWorldServiceImpl implements HelloWorldService { 8. 9. /* 10. * sayHello 方法为 HelloWorldService 服务接口定义的 sayHello 方法提供具体实现 11. * 12. * @see org.vivianj.XFire.pojo.HelloWorldService#sayHelloToXFire() 13. */ 14. public String sayHello() { 15. return "Hello World!"; 16. } 17. 18.} |
3.修改 services.xml,将 POJO 发布成 Web 服务
我们可以在 WEB-INF\classes\META-INF\XFire\services.xml 文件中的 <beans …> 和 </beans> 元素中间加入如下的 xml 内容将上面创建的 HelloWorldService 发布成 Web 服务。
1.<service> 2. <name>HelloWorldService</name> 3. <namespace>http://vivianj.org/HelloWorldService</namespace> 4. <serviceClass> 5. org.vivianj.xfire.pojo.HelloWorldService 6. </serviceClass> 7. <implementationClass> 8. org.vivianj.xfire.pojo.HelloWorldServiceImpl 9. </implementationClass> 10.</service> |
其中各元素的功能如下:
- service
service 标签和它所包含的 xml 内容为发布成 Web 服务的 POJO 提供完整的描述。
- name
Web 服务被发布时所采用的唯一名称。
- namespace
Web 服务发布时所使用的命名空间。
- serviceClass
Web 服务接口类的全名,包括包名和类名。
- implemetationClass
Web 服务实现类的全名,包括包名和类名。
更多 service 元素的子元素和它们的用法请参考
通过上面的三个步骤,我们已经将新创建的HelloWorldService发布成了Web服务,我们可以使用下面的步骤测试一下创建的Web服务是否能够正常运行:
- 编译上面的步骤中创建的 Java 接口和类;
- 启动 TOMCAT 服务器。
- 等 TOMCAT 服务器完全启动后,打开浏览器,在地址栏中输入 http://localhost:8080/XFire/services/HelloWorldService?wsdl。
其中 HelloWorldServcie 是配置文件中 service\name 元素所定义的内容,”wsdl”参数表示查看该 Web 服务的 WSDL(Web服务描述语言)文件。
如果浏览器中出现错误提示,请按照上面的步骤和说明检查已经完成的开发、配置过程是否完全正确。
|
|
客户端代码:
public class HelloWorldServiceClient {
public static void main(String[] args) {
Client client;
try {
client = new Client(new URL(
"http://localhost:9091/XFire/services/HelloWorldService?wsdl"));
Object[] results;
//第一个参数是方法名,后面的参数是需要传入的参数
results = client.invoke("sayHello", new Object[]{null});
System.out.println((String)results[0]);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
本文中作者首先讲解了 XFire 框架的主要特性,XFire 框架的运行环境以及基于 XFire 框架开发 SOA 应用的基本步骤,并且借助于 SOA 环境下的 ”Hello World!”例子,详细的讲解和演示了如何基于 XFire 框架、经过简单的开发、配置步骤就将一个 POJO 类中包含的方法发布成Web服务。从 ”Hello World!”例子实现的过程中,我们可以发现 XFire 框架最大化的发挥了 POJO 的作用,减少了 SOA 实施时对框架本身的依赖,降低了 SOA 实施的难度,企业实施 SOA 时并不需要增加太多的投入就可以实现目标。