本文适用于webservice 初学者,通过一个简单的webservice实例+调用讲解
不知道什么是webservice的,去百度,简单来说就是个socket 接口服务,类似天气服务、手机归属地查询服务...
下面我们自己来写一个webservice 接口
1.打开idea ,新建一个java project,按下图勾选webservice,以及ApacheAxis
2.填写工程名字,完成创建
3.项目初始结构(有一个自动生成的Java类–HelloWorld)
4.生成WSDL文件
a.可以修生成的HelloWorld文件内容,我这里实现一个加法,代码如下:
package example;
public class HelloWorld {
public double add(double a,double b) {
return a + b;
}
}
5.右键选择webservice ,生产wsdl 文件
6.这时会发现在项目结构目录里多了一个HelloWorld.wsdl文件。
7.配置Tomcat服务器,idel 没有装tomcat插件的自行百度安装,很简单
a.选择Run > Edit Configurations,
这时配置页面底部可能会显示有Warning:No Artifacts marked for deployment(警告:没有标记要部署的产物)。
点击警告信息右侧的Fix…按钮切换到Deployment标签页。
8.在出现的窗口中选择Project Settings > Artifacts,会到在新的警告信息。点击警告信息右侧的Fix…按钮,在弹出菜单里选择Add ‘JAX-WS-Apache Axis’ to the artifact。
9.测试http://localhost:8081/services,
http://localhost:8081/services/HelloWorld?wsdl
6)编写客户端代码调用服务
package test;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.utils.StringUtils;
public class CalculateClient {
public static void main(String[] args) {
// 指定调用WebService的URL(这里是我们发布后点击HelloWorld)
String url = "http://localhost:8081/services/HelloWorld?wsdl";
//调用的方法
String method = "add";
//调用方法的参数列表
Object[] parms =new Object[]{2.0,3.0};
CalculateClient calculateClient =new CalculateClient();
//调用方法
String svrAddResult = calculateClient.CallMethod(url, method, parms);
System.out.println(svrAddResult);
String svrMinusResult = calculateClient.CallMethod(url, "minus",new Object[]{5.0,2.0});
System.out.println("5.0 - 2.0 is " + svrMinusResult);
}
//实现WebService上发布的服务调用
public String CallMethod(String url,String method,Object[] args) {
String result =null;
if(StringUtils.isEmpty(url)) {
return "url地址为空";
}
if(StringUtils.isEmpty(method)) {
return "method地址为空";
}
Call rpcCall =null;
try {
//实例websevice调用实例
Service webService =new Service();
rpcCall = (Call) webService.createCall();
rpcCall.setTargetEndpointAddress(new java.net.URL(url));
rpcCall.setOperationName(method);
//执行webservice方法
double rslt = (double) rpcCall.invoke(args);
result =String.valueOf(rslt);
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
10.运行测试类: