WebService客户端

大家好上一篇我们讲了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,项目结构如下:

WebService客户端_第1张图片


开发步骤如下:

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:服务提供端发布的地址

生成代码如下:

WebService客户端_第2张图片

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 entryList =  _qryPageList_arg0.getEntry();
        //以HashMap为参数     
        HashMap paramMap = new HashMap();
        paramMap.put("userName", "xhsh1234567890000");
        paramMap.put("userPassword", "123456");
        //把HashMap为参数 转存到entryList对象,通过entryList作为载体把参数传给服务端
        for (Map.Entry entry1 : paramMap.entrySet()) {  
            Entry paramEntry = new Entry();
            paramEntry.setKey( entry1.getKey());
            paramEntry.setValue( entry1.getValue());
            entryList.add(paramEntry);
        }         

        java.util.List _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);


添加参考位置如下:

WebService客户端_第3张图片



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

服务端收到的参数如下:

WebService客户端_第4张图片

客户端收到的参数如下:


WebService客户端_第5张图片

你可能感兴趣的:(远程调用,J2EE框架)