一.首先创建用eclipse创建一个web工程,我命名为store.
二.导入我下载好的xfire文件夹下的lib文件夹的所有包还有一个xfire-all-1.2.6.jar包
xfire的下载地址:http://xfire.codehaus.org/Download
三.环境搭好了.开始写代码了。
在web.xml文件下输入
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
其中主要就是引入了XFireServlet,用以处理Web Service请求,并且负责提供Web Service的WSDL,如果你发布了一个名为BookService的WebService,则可以通过网址:
http://<服务器>[:端口]/<webapp名>/services/BookService
来访问这个WebService,并且通过地址:
http://<服务器>[:端口]/<webapp名>/services/BookService?WSDL 来得到这个WebService的WSDL信息。
四.写我们需要提供的service接口类和实现类。
先写一个接口,这个接口是告诉服务器你的WebService哪些方法可以被用户调用的。
public interface SayHiService { public String sayHi(String name); }
然后写该接口的实现类
/**
* @Title: SayHiServiceImpl.java
* @Package com.chaowen.study
* @Description: TODO(用一句话描述该文件做什么)
* @author chaowen
* @date 2011-9-8 下午11:41:04
* @version V1.0
*/
package com.chaowen.study;
/**
* @ClassName: SayHiServiceImpl
* @Description: 接口实现类
* @author chaowen
* @date 2011-9-8 下午11:41:04
*
*/
public class SayHiServiceImpl implements SayHiService {
/**
* 该方法是可以通过WebService调用访问到的
*/
@Override
public String sayHi(String name) {
if(name == null){
return "连名字也不肯告诉我吗";
}
return name+", 你吃了吗?没吃回家吃去吧。";
}
/**
* 该方法因为没有在接口SayHiService中定义,所以不能被WebService调用到
*/
public String 不告诉你(){
return "我的名字不告诉你!";
}
}
五.把工程发布为WebService
直接在eclipse里 部署工程运行。
或者直接在tomcat安装目录底下找到conf文件夹,打开server.xml,在</host>标签之前加上这句话
docBase是工程所在的路径,根据你的工程而修改吧。
然后启动tomcat,打开浏览器,输入:http://localhost:8080/store/services
会看到
说明你成功了。
六.最后一步了。写客户端.
/**
* @Title: SayHiClient.java
* @Package com.chaowen.study
* @Description: TODO(用一句话描述该文件做什么)
* @author chaowen
* @date 2011-9-9 上午12:20:25
* @version V1.0
*/
package com.chaowen.study;
import java.net.MalformedURLException;
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;
/**
* @ClassName: SayHiClient
* @Description: 客户端调用webService
* @author chaowen
* @date 2011-9-9 上午12:20:25
*
*/
public class SayHiClient {
public static void main(String[] args) {
String serviceURL = "http://localhost:8080/store/services/SayHiService";
//两种方法创建service
// Service serviceModel = new ObjectServiceFactory().create(SayHiService.class,null,"http://cn.com.pansky/SayHiService",null);
Service serviceModel = new ObjectServiceFactory().create(SayHiService.class);
XFireProxyFactory serviceFactory = new XFireProxyFactory();
try{
SayHiService service = (SayHiService) serviceFactory.create(serviceModel, serviceURL);
Client client = Client.getInstance(service);
//client.addOutHandler(new OutHeaderHandler());
// disable timeout
// client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "1");
String hello = service.sayHi("张山疯");
System.out.println("服务器对[张山疯] 的回答是:" + hello );
hello = service.sayHi(null);
System.out.println("服务器胡言乱语说:" + hello );
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
运行结果是