webservice----xfire

原创 2012年03月22日 17:07:54

最近在参与开发,用到webservice ,虽然以前看过,但是从来没有用过 ,网上的demo 很多,各式各样的,都是一个简单的介绍,输入简单类型参数,返回对象也是简单类型,而且可运行的真不多。项目需要调用一个其他项目的数据 ,数据量不可预算,而且需要展示一般的分页信息。。。总页数,总条数,当前页...所以需要使用自定义的分页类。代码如下:

服务端:

 1.web.xml

       <servlet>
             <servlet-name>webService</servlet-name>
             <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
             <load-on-startup>0</load-on-startup>
     </servlet>
     <servlet-mapping>
            <servlet-name>webService</servlet-name>
           <url-pattern>/services/*</url-pattern>
     </servlet-mapping>

2.applicationContext.xml    

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="
http://www.springframework.org/schema/beans
       xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
      
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/> 

  <!-- 实现类--> 
    <bean id="commentForQiYeImpl" class="com.hc360.comment.ws.impl.CommentForQiYeImpl">  
       <property name="topic" ref="frontTopicDao"></property>
       <property name="pic" ref="piccommDao"></property>     
    </bean> 
<!--    此处MathService为被客户端使用的服务名--> 
    <bean name="CommentService" class="org.codehaus.xfire.spring.ServiceBean"> 
        <property name="serviceBean" ref="commentForQiYeImpl"/> 
        <property name="serviceClass" value="com.hc360.comment.ws.ICommentForQiYe"/> 
        <property name="inHandlers"> 
          <list> 
            <ref bean="addressingHandler"/> 
          </list> 
        </property> 
    </bean> 
    <bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/>
</beans>

3.自定义的pageinfo

 

package com.hc360.comment.ws;

import java.io.Serializable;
import java.util.ArrayList;


public class PageInfo implements Serializable {
 
 /**
  *
  */
 private static final long serialVersionUID = 1L;

 private static int DEFAULT_PAGE_SIZE = 15;

 private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数

 private long start; // 当前页第一条数据在List中的位置,从0开始

 private ArrayList<CommentWSVO> data; // 当前页中存放的记录,类型一般为List

 private long totalCount; // 总记录数
 
 private int pageIndex;//起始页数
 
 private int pageCount;//总页数
 
 private int prePage;//上一页页号
 
 private int nextPage;//下一页页号
 
 /**
  * 构造方法,只构造空页.
  */
 public PageInfo() {
  this.pageIndex=1;
  this.pageSize=DEFAULT_PAGE_SIZE;
  this.start = getStartOfPage(pageIndex);
  this.data = new ArrayList<CommentWSVO>();
 }

 public PageInfo(int pageIndex,int pageSize){
  this.pageIndex=pageIndex;
  this.pageSize=pageSize;
  this.start = getStartOfPage(pageIndex);
  this.data = new ArrayList<CommentWSVO>();
 }

 /**
  * 取总记录数.
  */
 public long getTotalCount() {
  return this.totalCount;
 }


 /**
  * 取每页数据容量.
  */
 public int getPageSize() {
  return pageSize;
 }

 /**
  * 取该页当前页码,页码从1开始.
  */
 public long currentPageNo() {
  return start / pageSize + 1;
 }

 /**
  * 该页是否有下一页.
  */
 public boolean hasNextPage() {
  return this.currentPageNo() < this.getPageCount() - 1;
 }

 /**
  * 该页是否有上一页.
  */
 public boolean hasPreviousPage() {
  return this.currentPageNo() > 1;
 }

 /**
  * 获取任一页第一条数据在数据集的位置,每页条数使用默认值.
  *
  * @see #getStartOfPage(int,int)
  */
 protected static int getStartOfPage(int pageNo) {
  return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);
 }

 /**
  * 获取任一页第一条数据在数据集的位置.
  *
  * @param pageNo   从1开始的页号
  * @param pageSize 每页记录条数
  * @return 该页第一条数据
  */
 public static int getStartOfPage(int pageNo, int pageSize) {
  return (pageNo - 1) * pageSize;
 }

 public int getNextPage() {
  return nextPage;
 }

 public void setNextPage(int nextPage) {
  this.nextPage = nextPage;
 }

 public int getPageIndex() {
  return pageIndex;
 }

 public void setPageIndex(int pageIndex) {
  this.pageIndex = pageIndex;
 }

 public int getPrePage() {
  return prePage;
 }

 public void setPrePage(int prePage) {
  this.prePage = prePage;
 }

 /**
  * 设置总的记录条数,将根据总的记录条数计算出总页数pageCount
  * */
 public void setTotalCount(long totalCount) {
  this.totalCount = totalCount;
     //计算总的页数
  this.pageCount=this.getPageCount();
  //计算当前页的索引
  if(this.pageIndex>this.pageCount){
   pageIndex=pageCount>=1?pageCount:1;
  }
  //计算下一页的页号
  this.nextPage=Math.min(getPageIndex() + 1,this.pageCount);
  //计算上一页的页号
  this.prePage=Math.max(getPageIndex() - 1, 1);
 }
 /**
  * 取总页数.
  */
 public int getPageCount() {
  if (totalCount % pageSize == 0)
   return (int) (totalCount / pageSize);
  else
   return (int) (totalCount / pageSize + 1);
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

 public long getStart() {
  return start;
 }

 public void setStart(long start) {
  this.start = start;
 }

 public ArrayList<CommentWSVO> getData() {
  return data;
 }

 public void setData(ArrayList<CommentWSVO> data) {
  this.data = data;
 }

 public void setPageCount(int pageCount) {
  this.pageCount = pageCount;
 }
 
}

4.封装的pageinfo的list实体---  CommentWSVO

package com.hc360.comment.ws;
/**
 *
 * @author Administrator
 *
 */
public class CommentWSVO {
 private long infoId;
 private long ttlNum;

 public CommentWSVO(long infoId, long ttlNum) {
  this.infoId = infoId;
  this.ttlNum = ttlNum;
 }

 public long getInfoId() {
  return infoId;
 }

 public void setInfoId(long infoId) {
  this.infoId = infoId;
 }

 public long getTtlNum() {
  return ttlNum;
 }

 public void setTtlNum(long ttlNum) {
  this.ttlNum = ttlNum;
 }

 public CommentWSVO() {
 }

}

5.webservices 接口

 

package com.hc360.comment.ws;

import java.util.List;

import javax.jws.WebService;

import com.hc360.comment.ws.PageInfo;

@WebService
public interface ICommentForQiYe {

 /**
  *  获取评论
  * @param top10Ids 不包括top10 infoid
  * @param infotitle 模糊信息标题
  * @param systype 0cms1vms2qiye
  * @param areacode 行业编号
  * @param gntype 0跟帖留言1图评
  * @param pageSize 每页的条数
  * @param pageIndex 当前页数
  * @return
  */
 public  PageInfo getTop100GT(List<String> top10Ids,String infotitle,String systype,String areacode,int gntype,int pageSize,int pageIndex);
 /**
  * 测试
  * @return
  */
 public String sayHI();  
 
}

6.webservices 接口实现类

package com.hc360.comment.ws.impl;


import java.util.List;

import javax.jws.WebService;

import com.hc360.comment.dao.IFrontTopicDao;
import com.hc360.comment.dao.PiccommDao;
import com.hc360.comment.ws.PageInfo;
import com.hc360.comment.ws.ICommentForQiYe;
@WebService(serviceName="CommentService",endpointInterface = "com.hc360.comment.ws.ICommentForQiYe")
public class CommentForQiYeImpl implements ICommentForQiYe { 
  
 private IFrontTopicDao topic ;
 private PiccommDao pic;
 
 public String sayHI(){
  return "hello webservice !!!";
 }
 public IFrontTopicDao getTopic() {
  return topic;
 }

 public void setTopic(IFrontTopicDao topic) {
  this.topic = topic;
 }

 public PiccommDao getPic() {
  return pic;
 }

 public void setPic(PiccommDao pic) {
  this.pic = pic;
 }

 /**
  *  获取评论
  * @param top10Ids 不包括top10 infoid
  * @param infotitle 模糊信息标题
  * @param systype 0cms1vms2qiye
  * @param areacode 行业编号
  * @param gntype 0跟帖留言1图评
  * @param pageSize 每页的条数
  * @param pageIndex 当前页数
  * @return
  */
 public PageInfo getTop100GT(List<String> top10Ids, String infotitle,
   String systype, String areacode, int gntype, int pageSize,
   int pageIndex) {
  PageInfo pageInfo = new PageInfo();  
  switch (gntype) {
  case 0:
   pageInfo = topic.getTop100Topic(systype, areacode,top10Ids,infotitle,pageSize, pageIndex);
   break;
        case 1:
         pageInfo = pic.getTop100DINGTopic(systype, areacode,top10Ids,infotitle,pageSize, pageIndex);
   break;
  default:
   break;
  }
  return pageInfo;
 }
}

服务端:http://127.0.0.1/demo/services/CommentService?wsdl 测试服务是否正常

客户端测试:

1.将需要的几个类copy 至客户端,跟据暴露的结构创建目录,如下图所示:<可以不需要webservice实现类>

  

2.写测试类测试数据

package com.xfire;

import java.net.MalformedURLException;
import java.util.ArrayList;


import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.service.Service;

import com.hc360.comment.ws.CommentWSVO;
import com.hc360.comment.ws.ICommentForQiYe;
import com.hc360.comment.ws.PageInfo;


public class Test {
 public static void main(String[] args) {
  //首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel  
        //serviceModel包含服务的说明,换句话说,就是服务的元数据  
        //Create a metadata of the service  
        Service serviceModel = new ObjectServiceFactory().create(ICommentForQiYe.class); 
         
        //访问的地址  
        String serviceURL = "http://127.0.0.1/demo/services/ICommentForQiYe"; 
         
        //通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现  
        //下面两行代码与这里直接new XFireProxyFactory()的作用是等效的  
        //XFire xfire = XFireFactory.newInstance().getXFire();  
        //XFireProxyFactory factory = new XFireProxyFactory(xfire);  
        //为XFire获得一个代理工厂对象  
        //Create a proxy for the deployed service  
        XFireProxyFactory factory = new XFireProxyFactory(); 
         
        //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)  
        //得到一个服务的本地代理,这个代理就是实际的客户端  
  try {
   ICommentForQiYe client = (ICommentForQiYe)factory.create(serviceModel, serviceURL);
   /**
          * Invoke the service
          * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie
          */ 
          
         /*--处理简单对象--*/ 
         String serviceResponse = client.sayHI(); 
         System.out.println(serviceResponse); 
          
         /*--处理对象--*/ 
         PageInfo pageInfo = new PageInfo(); 
         pageInfo = client.getTop100GT(null, 1, "0", "001", 20, 1);
          
         /*--处理List--*/ 
         ArrayList<CommentWSVO> personList = pageInfo.getData(); 
         for (CommentWSVO commentWSVO : personList) {
    System.out.println("infoId:"+commentWSVO.getInfoId()+"----count:"+commentWSVO.getTtlNum());
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } 
 }

 

 

相关文章推荐

XFire创建的WebService

  • 2017年11月17日 10:14
  • 5.13MB
  • 下载

webservice的xfire

  • 2017年08月17日 10:27
  • 27.59MB
  • 下载

webservice之xfire服务搭建及客户端请求(maven搭建项目)

1. 运行环境   (1)  操作系统:windows10   (2) JDK : 1.7   (3) IDE : Myeclipse10   (4) xfire : xfire1.2.6 ...

xfire webservice集成最少8个包

  • 2015年01月30日 14:42
  • 2.56MB
  • 下载

Xfire webservice 加密

  • 2016年06月23日 17:18
  • 18.97MB
  • 下载

xFire实现Java间自定义类型的WebService调用(一)

准备工作 安装MyEclipse 6.0,下载地址:http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/M...
  • ytzyg
  • ytzyg
  • 2011年09月30日 13:42
  • 539

xfire调用webservice

  • 2016年05月23日 09:22
  • 9KB
  • 下载

myeclipse xfire 开发webservice实例

  • 2012年08月16日 15:44
  • 588KB
  • 下载

xfire + eclipse 搭建WebService

下面就简述我测试xfire的开发过程。测试环境:eclipse+tomcat+xfire1.2.6 1. 在eclipse中新建名为xfireTest的dynamic Web Proje...

xfire webService

  • 2013年01月19日 10:50
  • 13.61MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:webservice----xfire
举报原因:
原因补充:

(最多只允许输入30个字)