最近在参与开发,用到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 systype,
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,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(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。