WebService-服务端与客户端

本文介绍了WebService的基本概念,它是一个平台独立、低耦合的分布式应用程序解决方案。通过实例展示了如何创建和发布服务端接口,使用CXF框架,并自动生成客户端执行类进行调用。详细步骤包括服务端接口和实现、发布服务、生成客户端代码以及客户端调用接口的过程。

什么是WebService

Web service:

  • 一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序
  • 可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序
  • 用于开发分布式的互操作的应用程序。

应用场景如,不用平台产品间接口调用,不同企业间接口调用

之前虽然一直又在写webService接口,但是没有关注到底是什么样的工作原理,这里小记一下。

简单实现

模拟学生成绩查询,服务端提供调用接口,客户端(第三方)通过webService查询

服务端接口和实现类编写

//接口
public interface StudentScore {
    public String getScoreById(String studentId);
}

//实现类
@WebService
public class StudentScoreImpl implements StudentScore {
    @Override
    public String getScoreById(String studentId) {
        out.print("获取学生成绩,学生id:"+ studentId);
        if("just".equalsIgnoreCase(studentId)){
            return "A";
        }else{
            return "B";
        }
    }
}

其中,实现类需要添加 @WebService注解

发布WebService服务

public class Service {

    /**
     * 开启,并发布webService服务
     * @param args
     */
    public static void main(String args[]){
        //定义webService地址: ip+port
        String addr = "http://127.0..0.1:3306/student";
        StudentScoreImpl studentScore = new StudentScoreImpl();
        //发布服务 地址+服务实现类
        Endpoint.publish(addr, studentScore);
    }
}

运行main方法,然后通过访问 http://127.0.0.1:3306/student?wsdl ,可以看到webService服务信息,如:Servcie调用方法

<service name="StudentScoreImplService">
    <port name="StudentScoreImplPort" binding="tns:StudentScoreImplPortBinding">
    <soap:address location="http://127.0.0.1:3306/student"/>
    </port>
</service>

自动生成客户端执行类

  • 目的,提供给第三方调用

  • 方法,可以使用jdk自带的wsimport.exe的工具,常用命令参数:

参数含义
-d生成class文件存放目录
-s生成java源码文件存放目录
-p生成自定义包路径

例如,执行命令:

C:\Users\TCLDUSER>wsimport -d d:\ws-test\class -s d:\ws-test\java -p webs.studen
t http://127.0.0.1:3306/student?wsdl

关键点是 wsimport命令 以及参数wsdl地址

生成的文件如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9p8KCe4-1586242066011)(http://ok2uxdyx6.bkt.clouddn.com/webservice2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DP3MynRy-1586242066012)(http://ok2uxdyx6.bkt.clouddn.com/webservice.png)]

客户端调用接口

将上一步生成的java源码文件可以copy至其他项目中进行使用

客户端调用代码:

import webs.student.StudentScoreImplService;

public class Client {
    public static void main(String args[]){
        System.out.println("客户端查询学生成绩信息");
        //调用自动生成的执行服务类
        StudentScoreImplService service = new StudentScoreImplService();
        //获取接口实现类
        webs.student.StudentScoreImpl studentScore = service.getStudentScoreImplPort();
        String score = studentScore.getScoreById("just");
        System.out.println(score);
    }
}

客户端输出日志:

客户端查询学生成绩信息
A

服务端输出日志:

获取学生成绩,学生id:just

当然,webService最大的优势在于使用xml传递参数信息,利用JavaBean与xml之间的互相转换来实现接口的调用。

使用CXF

使用上,需要添加额外的cxf环境变量配置:

  • CXF_HOME:D:\runtime\apache-cxf-2.7.18
  • PTTH:%CXF_HOME%\bin;
  • CLASSPATH:%CXF_HOME%/lib

然后将命令 wsimport 换为 wsdl2java,如

wsdl2java -d d:\ws-test\test  -p ws.service.web.wsdl http://127.0.0.1:12345/weather?wsdl

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值