XFire简介
它拥有一个轻量级的信息处理模块,通过STAX来与SOAP信息相结合。提供了一个工作在web services下的简单API,支持POJO和schema开发。
XFire
是 CodeHaus 推出的下一代的 Java SOAP框架,
它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
通过提供简单的API和支持标准协议,可以很方便的开发面向服务的程序。内建在STAX基于流的XML解析引擎的基础上,XFire拥有很高的性能。
XFire特性
1)
、 支持重要的web服务标准,如SOAP、WSDL、WS-I、WS-Addressing、WS-Security基本概要等
2)
、 高性能的SOAP
栈设计
3)
、可插拔的绑定,支持POJO、XMLBeans、JAXB1.1、JAXB2及castor
4)
、 jsr181规范
5)
、支持多种传输协议:HTTP、JMS、XMPP、In-JVM
6)
、可嵌入式的API
7)
、 JBI支持
8)
、客户端和服务器端的存根创建工具
9)
、 JAX-WS的早期支持
XFire使用
首先打开IDE,创建一个普通的Java工程,将
XFire
所需要的jar加入到工程的类库引用中。创建一个简单的Java文件,这个文件只有一个名为
sayHello
的成员方法。
//
包名
package
net.ruixin.webservicedemo;
/**
*
服务实现类的实现
* @author caoxiang
*/
public
class HelloWorldServiceImpl implements IHelloWorldService {
/**
*
返回名称的方法
* @param name
名称
*/
public String sayHello(String name){
return "
您好,"+name;
}
}
|
//
包名
package
net.ruixin.webservicedemo;
/**
*
服务接口类的创建
* @author caoxiang
*/
public
interface IHelloWorldService {
/**
*
返回名称的方法
* @param name
名称
* @return
返回值
*/
public String sayHello(String name);
}
|
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<serviceClass>
net.ruixin.webservicedemo.IHelloWorldService
</serviceClass>
<implementationClass>
net.ruixin.webservicedemo.HelloWorldServiceImpl
</implementationClass>
<scope>application</scope>
</service>
</beans>
|
标签说明:
WebService
的服务名
<name>HelloWorldService</name>
WebService
的服务接口类<serviceClass>net.ruixin.webservicedemo.IHelloWorldService
</serviceClass>
WebService
的服务接口实现类<implementationClass>net.ruixin.webservicedemo.HelloWorldServiceImpl</implementationClass>
WebService
的服务有效范围
<scope>application</scope>
|
//
包名
package
net.ruixin.webservicedemo;
import
java.net.MalformedURLException;
import
org.codehaus.xfire.XFireFactory;
import
org.codehaus.xfire.client.XFireProxyFactory;
import
org.codehaus.xfire.service.Service;
import
org.codehaus.xfire.service.binding.ObjectServiceFactory;
/**
*
测试服务类的创建
* @author caoxiang
*/
public
class HelloWorldClient {
/**
*
测试主程序
* @param args
* @throws Exception
*/
public static void main(String args[]) {
//
通过接口类创建Service对象
Service srvcModel = new ObjectServiceFactory()
.create(IHelloWorldService.class);
//
通过XFire的工厂类创建工厂对象
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//
访问的地址
String helloWorldURL="http://localhost:5200/xfire_sample/services/HelloWorldService";
//
异常处理
try {
//
创建服务对象
IHelloWorldService srvc = (IHelloWorldService) factory.create(srvcModel, helloWorldURL);
//
调用服务中的方法,并显示其结果
System.out.print(srvc.sayHello("dennis"));
//
异常处理
} catch (MalformedURLException e) {
//
显示错误信息
e.printStackTrace();
}
}
}
|
XFire
、Axis以及其他的一些商业产品都提供了wsdl文档创建客户端代码的工具。这里用XFire提供的wsgen工具来创建客户端的访问代码。
Wsgen
是XFire提供的一个ant task,task的申明如下:
<target name="Wsgen">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="build.classpath" />
<wsgen outputDirectory="build.classpath" wsdl="http://localhost:portno/xfire_sample/services/HelloWorldService?wsdl" package="client" />
</target>
|
outputDirectory
属性定义了创建代码的存放路径,wsdl是web服务的wsdl文件,package代表创建的代码的package。还可以通过binding属性指定bind类型,jaxb或者是xmlbeans。
这样就会在outputDirectory属性指定的目录下创建多个Java文件,这些文件提供了访问web服务的方法。
XFire
框架中,我们有两种方式将 POJO 发布成 Web 服务:
方式1:直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<serviceClass>
net.rubyeye.webservicedemo.IHelloWorldService
</serviceClass>
<implementationClass>
net.rubyeye.webservicedemo.HelloWorldServiceImpl
</implementationClass>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>
</beans>
|
方式2:基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;
package
com.test;
import
javax.jws.WebMethod;
import
javax.jws.WebParam;
import
javax.jws.WebResult;
import
javax.jws.WebService;
@WebService(name="Hello",serviceName="Hello",
targetNamespace="http://www.oksonic.cn/xfire")
public
class Hello {
@WebMethod
@WebResult
public String getName(@WebParam String name){
return "Hello world " + name;
}
}
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<serviceClass>com.test.Hello</serviceClass>
<serviceFactory>jsr181</serviceFactory>
</service>
</beans>
|
XFire总结
XFire
做为Java SOAP的开发框架,具备一定的优越性,比如他能够快速的开发,能够比较容易的部署到服务器上,做为soap4j的下一代开源框架,XFire不但拥有了上一代的优势,而且在其优势的基础上也进行了一定的扩展,增加了许多的扩展,对于webservice的开发,XFire做到了可以快速开发,快速部署,在服务器方面,XFire的性能比较优越,相比其他的web service框架,XFire的性能也是比较优越的。XFire在发布之后,如果客户端需要使用已经发布的web service,那么他就必须通过服务端程序生成客户端代码或者将服务端的接口类写入到客户端,在这方面Axis做得比XFire要好,因为Axis是面向wsdl的,针对的是服务的描叙,而并非是服务的本质(类和接口),对于使用者来说XFire开发简单,部署方便,性能优越这些都是XFire作为web service的优势所在,正如敏捷式一书的作者,这么说过,作为开发效率和速度是最重要的。