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

被折叠的 条评论
为什么被折叠?



