WebService客户端

本文介绍如何使用Apache CXF在Eclipse环境中搭建WebService客户端,并通过示例代码展示如何调用WebService服务,包括生成客户端代码、时间类型转换及参数传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好上一篇我们讲了WebService服务开发,接下来我们将奖WebService服务调用。

环境准备:

Windows7、JDK7、Eclipse4.4.2、apache-cxf-3.1.13.zip

下载地址为:http://mirrors.tuna.tsinghua.edu.cn/apache/cxf/3.1.13/apache-cxf-3.1.13.zip


步骤:

首先需要开发一个调用端代码,代码结构如下

在Eclipse中创建一个Web应用程序,程序名为:WebserviceClientProj,项目结构如下:


开发步骤如下:

1、在非中文目录下减压apache-cxf-3.1.13.zip即可

2、cmd打开windows命令行窗口,切换到apache-cxf-3.1.13的bin目录:cd /d E:\MyFolder\apache-cxf-3.1.13\bin

3、生成调用端代码:在2中打开的命令行窗口中执行如下命令:wsdl2java -d d:/wsdl -client -encoding utf-8 http://127.0.0.1:8981/user?wsdl 注意:执行命令时必须保证服务端处于启动状态)
参数注释:
-d:客户端代码生成的目录
-client :生成客户端代码
-encoding:生成代码的编码
http://127.0.0.1:8981/user?wsdl:服务提供端发布的地址

生成代码如下:


4、把生成的代码复制到WebserviceClientProj的src目录下

5、创建时间转化类DateTransformUtils.java

package cn.com.utils;

import java.util.Calendar;
import java.util.Date;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

/**
 * @author xu.hongsheng
 * @date 2017-09-30
 * 功能描述:时间转换
 */
public class DateTransformUtils {

    /**
     * 将Date类转换为XMLGregorianCalendar
     * @param date
     * @return
     */
    public static XMLGregorianCalendar dateToXmlDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        DatatypeFactory dtf = null;
        try {
            dtf = DatatypeFactory.newInstance();
        } catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        }
        XMLGregorianCalendar xMLGregorianCalendar = dtf
                .newXMLGregorianCalendar();
        xMLGregorianCalendar.setYear(cal.get(Calendar.YEAR));
        // 由于Calendar.MONTH取值范围为0~11,需要加1
        xMLGregorianCalendar.setMonth(cal.get(Calendar.MONTH) + 1);
        xMLGregorianCalendar.setDay(cal.get(Calendar.DAY_OF_MONTH));
        xMLGregorianCalendar.setHour(cal.get(Calendar.HOUR_OF_DAY));
        xMLGregorianCalendar.setMinute(cal.get(Calendar.MINUTE));
        xMLGregorianCalendar.setSecond(cal.get(Calendar.SECOND));
        return xMLGregorianCalendar;
    }

    /**
     * 将XMLGregorianCalendar转换为Date
     * @param xMLGregorianCalendar
     * @return
     */
    public static Date xmlDate2Date(XMLGregorianCalendar xMLGregorianCalendar) {
        return xMLGregorianCalendar.toGregorianCalendar().getTime();
    }
}

6、在UserService_UserServiceImplPort_Client.java类中新增如下代码:

       cn.com.QryPageList.Arg0 _qryPageList_arg0 = null;       
        //初始化传参对象
        _qryPageList_arg0 = new cn.com.QryPageList.Arg0();
        //从传参对象中获取一个key/value的实体类集合
        List<QryPageList.Arg0.Entry> entryList =  _qryPageList_arg0.getEntry();
        //以HashMap为参数     
        HashMap<String,Object> paramMap = new HashMap<String,Object>();
        paramMap.put("userName", "xhsh1234567890000");
        paramMap.put("userPassword", "123456");
        //把HashMap为参数 转存到entryList对象,通过entryList作为载体把参数传给服务端
        for (Map.Entry<String, Object> entry1 : paramMap.entrySet()) {  
            Entry paramEntry = new Entry();
            paramEntry.setKey( entry1.getKey());
            paramEntry.setValue( entry1.getValue());
            entryList.add(paramEntry);
        }         

        java.util.List<cn.com.User> _qryPageList__return = port.qryPageList(_qryPageList_arg0);
        System.out.println("qryPageList.result=" + _qryPageList__return);
        System.out.println("服务端返回用户名:"+_qryPageList__return.get(0).getUserName());
        System.out.println("服务端返回生日:"+_qryPageList__return.get(0).getBirthDay());
        }
        {
        System.out.println("Invoking insert...");
        cn.com.User _insert_arg0 = null;       
        //向服务端的insert方法传入用户的生日
        _insert_arg0 = new User();
        _insert_arg0.setBirthDay(DateTransformUtils.dateToXmlDate(new Date()));
        port.insert(_insert_arg0);


添加参考位置如下:




7、运行UserService_UserServiceImplPort_Client.java类,得到如下结果,则测试成功

服务端收到的参数如下:

客户端收到的参数如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值