XFire的webservice应用

来源:互联网 发布:绘制贴图的软件 编辑:程序博客网 时间:2024/04/30 14:13

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方法就可以了。

0 0