XFire是很流行的webService框架和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成。
XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。
开始建立一个简单的web服务端项目。
1、新建web项目,下载xfire-distribution-1.2.6.zip,百度搜索即可,官网也行。把jar包都导入web项目。
建立User类,
package shjh.xfire.domain;
import java.util.Date;
public class User {
private Long userId;
private String accountId;
private String userName;
private Date lastLogin;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
}
UserService类,用作对外接口
package shjh.xfire.service;
import shjh.xfire.domain.User;
public interface UserService {
public User queryUserByAccoutId(String accountId);
public void createUser(User user);
}
建立UserServiceImpl类,是接口实现类,对外透明。
package shjh.xfire.service.impl;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import shjh.xfire.domain.User;
import shjh.xfire.service.UserService;
public class UserServiceImpl implements UserService {
private static final Log log = LogFactory.getLog(UserServiceImpl.class);
@Override
public User queryUserByAccoutId(String accountId) {
log.info("accountId=" + accountId);
User user = new User();
user.setAccountId(accountId);
user.setLastLogin(new Date());
user.setUserId(new Long(123L));
user.setUserName("用户名");
return user;
}
@Override
public void createUser(User user) {
log.debug("createUser user=" + user);
System.out.println("createUser " + user.getAccountId());
}
}
编写一个services.xml文件,默认的路径就是这个,不然会报错文件找不到。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>UserService</name>
<serviceClass>shjh.xfire.service.UserService</serviceClass>
<implementationClass>shjh.xfire.service.impl.UserServiceImpl</implementationClass>
</service>
</beans>
web.xml中配置org.codehaus.xfire.transport.http.XFireConfigurableServlet,框架提供的servlet
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
2、tomcat中启动项目,浏览器http://localhost:8080/xfire/services/UserService?wsdl
,就能看到wsdl文件了,说明发布成功。
3、建立客户端Java项目。
建立和server端一样的接口UserService,
建立调用测试类Main,
package cfireClient.test;
import java.net.MalformedURLException;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import shjh.xfire.domain.User;
import shjh.xfire.service.UserService;
public class Main {
public static void main(String[] args) {
String serviceUrl = "http://localhost:8080/xfire/services/UserService";
Service serviceModel = new ObjectServiceFactory().create(UserService.class);
try {
UserService userService = (UserService) new XFireProxyFactory().create(serviceModel, serviceUrl);
User user = new User();
user.setAccountId("1341");
userService.createUser(user);
User query = userService.queryUserByAccoutId("1341");
System.out.println(query.getAccountId() + " --> " + query.getUserName());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
运行main方法就可以了。