XFire是新一代Java的Soap框架,XFire API易于使用,并且支持各种标准,因此,XFire使得SOA的开发更加简单明了。XFire在性能方面也非常出色,因为它使用了对内存要求比较低的StAX(Streaming API for XML)模型。现在,XFire更名为CXF,最新版本为2.0。
使用XFire实现Web服务
前面您已经了解如何使用Axis和Spring,创建标准的web档案并把它们部署为web服务,从而来实现Web服务。现在,我们这里将使用相对轻量级的方式,即使用XFire来实现Web服务。
我们假定您已经从下面的URL下载了XFire1.2.2版本。
http://xfire.codehaus.org/Download
下载后请解压到本地目录,然后相应地修改本章源代码examples. PROPERTIES 文件中的xfire.home属性。
服务器端及客户端代码
XFire实现Web服务实例的源代码位于ch03/04_XFire/src目录中,现在我们来逐一看看其源代码((译者注:本书代码请从http://www.packtpub.com/files/code/3216_Code.zip处下载):
IHello.java
按照惯例,IHello为一个简单的业务接口,只定义了一个sayHello方法。
public interface IHello{
String sayHello(String name);
}
HelloServiceImpl
HelloServiceImpl是我们的Web服务实现类,它实现了IHello接口。
public class HelloServiceImpl implements IHello{
private static long times = 0L;
public HelloServiceImpl(){
System.out.println("HelloServiceImpl.HelloServiceImpl()...");
}
public String sayHello(String name){
System.out.println("HelloServiceImpl.sayHello
(" + (++times) + ")");
return "HelloServiceImpl.sayHello :
HELLO! You just said:" + name;
}
}
web.xml文件
对XFire Web服务,我们需要在web.xml文件中把org.codehaus.xfire.transport.http.XFireConfigurableServlet配置为一个Servlet,然后,我们把所有类似于/services/模式的URL请求都交由XFireConfigurableServlet这个Sevlet处理,web.xml中的具体配置如下:.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
services.xml文件
services.xml文件是XFire主要的配置文件,现在我们来看看这个实例文件,理解其中细节:
s xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Hello</name>
<namespace>http://xfire.binildas.com</namespace>
<serviceClass>com.binildas.xfire.IHello</serviceClass>
<implementationClass>
com.binildas.xfire.HelloServiceImpl
</implementationClass>
</service>
</beans>
在上面文件中的name元素是必须的,它表示要暴露给外界的服务名称;namespace元素是可选的,它表明该服务的目标名字空间; serviceClass表示您想要把哪个对象设为服务对象;而implementationClass元素则表明,当服务被调用时,您希望使用的Web服务的实现类。
运行服务器和客户端
请使用下列命令编译服务器端代码:
cd ch03/04_XFire
ant
上面的命令不但编译服务器端代码,也编译客户端代码。编译结束后,您将会在下列位置发现可以部署的war文件:
ch03/04_XFire/dist
现在,您就可以将上面的war文件拷贝到您的web服务器的webapps目录,然后重启服务器。如果部署顺利,您可以通过访问http://localhost:8080/HelloXFire/services/Hello?wsdl这个URL获得该服务的WSDL。您也可以通过下面命令,执行客户端代码测试您的Web服务 :
cd ch03/04_XFire
ant run
下图是客户端代码的运行界面:
本章小结
本章我们主要讲述了Java世界中Web服务实现的主要方法,而且,我们对这些方法进行了实践:
JAX-WS 2.0: JAX-WS 2.0是JAX-WS(Java API for XML web services)规范的参考实现,我们在Java EE应用服务器和Java6标准版中部署了我们JAX-WS的实例程序。
Apache Axis:Axis是来自Apache诸多Web服务产品中的一个开源实现,我们开发并将Web服务代码打包成标准的war包,并将该服务部署到Apache Tomcat服务器。
Spring:Spring提供了依赖注入和bean交织及其它的功能,我们可以使用Spring核心包或Spring-WS来开发Web服务。在本章的实例程序中,我们使用Spring核心包对Axis的示例程序进行了改进。
Xfire:Xfire是新一代Java的Soap框架,它使得开发Web服务更加容易,开发过程更为明了。本章通过实例说明,使用Xfire编译并部署Web服务是非常简单的。