加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice----xfire

发布时间:2020-12-17 01:02:23 所属栏目:安全 来源:网络整理
导读:最近在参与开发,用到webservice,虽然以前看过,但是从来没有用过 ,网上的demo 很多,各式各样的,都是一个简单的介绍,输入简单类型参数,返回对象也是简单类型,而且可运行的真不多。项目需要调用一个其他项目的数据 ,数据量不可预算,而且需要展示一般

最近在参与开发,用到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(); ??}? ?}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读