使用XFIRE开发一个web service的实例
环境:Eclipse3.2+tomcat6.0+JDK1.6
xfire版本:xifre-1.2.6
1.准备工作
准备XFire所需要的jar包
方法1:在http://xfire.codehaus.org/下载xfire1.2.6-.zip压缩包,解压后lib下jar包
方法2:将myeclipse的安装目录下:
.......\myeclipse\eclipse\plugins\com.genuitec.eclipse.ws.xfire_5.1.0\data\1.2\lib的所有jar包
2.建工程
新建tomcat工程,命名为xfire。
目录结构
|
3.导入jar包
将xfire所需要的包copy到工程的lib目录下并导入(导入过程点工程右键,在java buildpath里)
4.更新web.xm文件
<?xmlversion="1.0"encoding="UTF-8"?> <web-appid="WebApp_ID"version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>xfire</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
<servlet> <servlet-name>XFireServlet</servlet-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> |
web.xml中添加的servlet映射表明,所有匹配“/services/*”的url请求全部交给org.codehaus.xfire.transport.http.XFireConfigurableServlet来处理。
5.制作服务
这里以一个简单的为例:如果name参数为null,返回“Hello guest”,否则返回“Hello 'name'”
5.1 新建一个接口HelloService,放在包com.lip.service下:
package com.lip.service;
publicinterface HelloService { public StringsayHello(String name); } |
5.2 做接口HelloService的实现类HelloServiceImpl,放在包com.lip.service.impl下:
package com.lip.service.impl;
import com.lip.service.HelloService;
publicclass HelloServiceImplimplements HelloService {
public String sayHello(String name) { if (null == name) { return"Hello guest!"; } else { return"Hello "+name; } } }
|
6.发布服务
在WEB-INF/src文件夹下,建立META-INF/xfire/services.xml文件。在WebContent\META-INF目录下新建xfire文件夹,然后在xfire目录下添加一个XFire使用的配置文件services.xml,该配置文件中的内容反映了要将哪些java类发布为web服务。本例中的services.xml内容如下: services.xml文件内容为:
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://xfire.codehaus.org/config/1.0"> <service>
<name>HelloService</name>
<namespace> http://www.57market.com.cn/HelloService </namespace>
<serviceClass> com.lip.service.HelloService </serviceClass>
<implementationClass> com.lip.service.impl.HelloServiceImpl </implementationClass>
</service> </beans> |
7查看服务
打开浏览器,访问http://localhost:8080/xfire/services/HelloService?wsdl
会得到HelloService这个服务的WSDL文档,可以保留这个WSDL文档以备用。
新建一个客户端访问类MathServiceClient:
package com.yao.xfire.client;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import com.yao.xfire.service.MathService;
public class MathServiceClient {
private static MathService mathService;
private MathServiceClient(){}
public static MathService getMathService(String serviceUrl) throws MalformedURLException{
if(mathService == null){
//创建服务
Service srvcModel = new ObjectServiceFactory().create(MathService.class);
//创建XFire对象
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//调用Web服务
mathService = (MathService) factory.create(srvcModel, serviceUrl);
//设置客户端调用的属性
Client client = Client.getInstance(mathService);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "300");
client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");
//如果需要设置代理
//client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_HOST, "10.3.1.6" );
//client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PORT, "8080");
}
return mathService;
}
public static void main(String[] args) throws MalformedURLException{
MathService service = MathServiceClient.getMathService("http://localhost:8080/xfireDemo/services/MathService");
int result = service.add(1, 14);
System.out.println("get the result: " + result);
}
}
将得到结果:get the result: 15。
8. 补充
下载xfire1.2.6-.zip,解压后的,xfire-all-1.2.6.jar放在lib下,导入后重新启动tomcat。
访问http://localhost:8080/xfire/services,得到以下结果,点击[wsdl]的链接,可以得到与7一样的结果。
9.保存WSDL
至此,我们利用XFIRE已经发布了一个web service服务的接口。
这个接口的描述就是这个XML格式的WSDL文件。其他应用程序可以根据这个文档编写他们的调用程序来调用我们提供的服务。